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

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

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
主站蜘蛛池模板: 国产成人亚洲影视在线 | 农村妇女野外性生话免费视频 | 欧美一区二区三区综合色视频 | 国产女主播福利在线 | tube性睡觉hd | 天天操天天舔 | 77色视频在线 | 国产成人一区二区三区小说 | 美女污视频| 欧美日韩在线一区 | www视频免费| 国产精品免费久久久久影院小说 | 亚飞与亚基国语1080p在线观看 | 17岁韩国在线观看免费1 | 99久久国产视频 | 91sao国产在线观看 | 全彩调教侵犯h本子全彩妖气he | 精品久久洲久久久久护士免费 | 99色在线播放 | 波多野结衣同性系列698 | 青青青久热国产精品视频 | 精品久久99麻豆蜜桃666 | 亚洲剧情在线 | 色综合中文字幕在线亚洲 | 国产在线精品观看 | 男人的天堂久久爱 | 99热在线观看免费 | aaaaa特级毛片 | 欧亚专线欧洲m码可遇不可求 | 亚洲娇小性hd | 男人的天堂视频在线 | 欧美性f | 久久精品一区二区三区资源网 | 国内精品久久久久久久久 | 亚洲国产成人精品无码区99 | 国模一区二区三区视频一 | 91影视在线看免费观看 | 亚洲 日韩 在线 国产 视频 | 婷婷去我也去 | 亚洲春色综合另类网蜜桃 | 白丝爆动漫羞羞动漫网站 |