一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JavaAgent的簡單例子

JavaAgent的簡單例子

2021-09-13 10:51catoop Java教程

這篇文章主要介紹了JavaAgent的簡單例子,對JavaAgent感興趣的同學,可以參考下

JavaAgent 是JDK 1.5 以后引入的,也可以叫做Java代理。

JavaAgent 是運行在 main方法之前的攔截器,它內定的方法名叫 premain ,也就是說先執行 premain 方法然后再執行 main 方法。

那么如何實現一個 JavaAgent 呢?很簡單,只需要增加 premain 方法即可。

看下面的代碼和代碼中的注釋說明:

  1. package com.shanhy.demo.agent;
  2.  
  3. import java.lang.instrument.Instrumentation;
  4.  
  5. /**
  6. * 我的Java代理
  7. *
  8. * @author 單紅宇(365384722)
  9. * @myblog http://blog.csdn.net/catoop/
  10. * @create 2016年3月30日
  11. */
  12. public class MyAgent {
  13.  
  14. /**
  15. * 該方法在main方法之前運行,與main方法運行在同一個JVM中
  16. * 并被同一個System ClassLoader裝載
  17. * 被統一的安全策略(security policy)和上下文(context)管理
  18. *
  19. * @param agentOps
  20. * @param inst
  21. * @author SHANHY
  22. * @create 2016年3月30日
  23. */
  24. public static void premain(String agentOps, Instrumentation inst) {
  25. System.out.println("=========premain方法執行========");
  26. System.out.println(agentOps);
  27. }
  28.  
  29. /**
  30. * 如果不存在 premain(String agentOps, Instrumentation inst)
  31. * 則會執行 premain(String agentOps)
  32. *
  33. * @param agentOps
  34. * @author SHANHY
  35. * @create 2016年3月30日
  36. */
  37. public static void premain(String agentOps) {
  38. System.out.println("=========premain方法執行2========");
  39. System.out.println(agentOps);
  40. }
  41. }

寫完這個類后,我們還需要做一步配置工作。

在 src 目錄下添加 META-INF/MANIFEST.MF 文件,內容按如下定義:

  1. Manifest-Version: 1.0
  2. Premain-Class: com.shanhy.demo.agent.MyAgent
  3. Can-Redefine-Classes: true

要特別注意,一共是四行,第四行是空行,還有就是冒號后面的一個空格,如下截圖:

JavaAgent的簡單例子

然后我們打包代碼為 myagent.jar

注意打包的時候選擇我們自己定義的 MANIFEST.MF

JavaAgent的簡單例子

接著我們在創建一個帶有main方法的主程序工程,截圖如下:

JavaAgent的簡單例子

然后將該主程序打包為 myapp.jar

如何執行 myagent.jar ?我們通過 -javaagent 參數來指定我們的Java代理包,值得一說的是 -javaagent 這個參數的個數是不限的,如果指定了多個,則會按指定的先后執行,執行完各個 agent 后,才會執行主程序的 main 方法。

命令如下:

  1. java -javaagent:G:\myagent.jar=Hello1
  2. -javaagent:G:\myagent.jar=Hello2
  3. -javaagent:G:\myagent.jar=Hello3 -jar myapp.jar

輸出結果:

G:\>java -javaagent:G:\myagent.jar=Hello1 -javaagent:G:\myagent.jar=Hello2 -javaagent:G:\myagent.jar=Hello3 -jar myapp.jar

=========premain方法執行========

Hello1

=========premain方法執行========

Hello2

=========premain方法執行========

Hello3

特別提醒:如果你把 -javaagent 放在 -jar 后面,則不會生效。也就是說,放在主程序后面的 agent 是無效的。

比如執行:

  1. java -javaagent:G:\myagent.jar=Hello1
  2. -javaagent:G:\myagent.jar=Hello2 -jar myapp.jar
  3. -javaagent:G:\myagent.jar=Hello3

只會有前個生效,第三個是無效的。
輸出結果:

G:\>java -javaagent:G:\myagent.jar=Hello1 -javaagent:G:\myagent.jar=Hello2 -jar myapp.jar -javaagent:G:\myagent.jar=Hello3

=========premain方法執行========

Hello1

=========premain方法執行========

Hello2

命令中的Hello1為我們傳遞給 premain 方法的字符串參數。

至此,我們會使用 javaagent 了,但是單單看這樣運行的效果,好像沒有什么實際意義嘛。

我們可以用 javaagent 做什么呢?下篇文章我們來介紹如何在項目中應用 javaagent。

最后說一下,還有一種,在main方法執行后再執行代理的方法,因為不常用,而且主程序需要配置 Agent-Class,所以不常用,如果需要自行了解下 agentmain(String agentArgs, Instrumentation inst) 方法。

以上就是JavaAgent的簡單例子的詳細內容,更多關于JavaAgent的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/catoop/article/details/51034739

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
主站蜘蛛池模板: 亚洲欧美日韩在线观看看另类 | 日本在线看免费 | aaaa黄| 天堂在线观看中文字幕 | 俄罗斯15一16处交 | 九九国产在线视频 | 久久久久久久久女黄9999 | 好涨好爽好大视频免费 | 高h巨肉play 高h短篇辣肉各种姿势bl | 国产精品原创永久在线观看 | 国产美女久久精品香蕉69 | 欧美日韩在线一区 | 天天做天天爽 | 色综合久久中文字幕网 | 精品精品久久宅男的天堂 | 天堂网在线网站成人午夜网站 | 日本欧美大码a在线视频播放 | dasd-698黑人在线播放 | 夫妇野外交换激情 | 2021国产麻豆剧传媒剧情动漫 | 4虎影院在线观看 | 国产三及| 男gay网站视频免费观看 | 亚洲福利精品电影在线观看 | 日产精品一卡2卡三卡4乱码久久 | 无人在线高清观看 | 女教师巨大乳孔中文字幕免费 | 精品日本三级在线观看视频 | 国产成人福利美女观看视频 | 四虎1515hhh co m | 潘金莲西门庆一级淫片aaaaaa | 国产精品资源在线观看网站 | 欧美日韩一区二区三区在线视频 | 欧美一区二区日韩一区二区 | 完整秽淫刺激长篇小说 | 九九99亚洲精品久久久久 | 免费人成在线观看视频播放 | 深夜福利影院在线观看 | 免费国产网站 | 日本不卡免免费观看 | 欧美高清在线精品一区 |