摘要:的作用在字節碼這個層面對類和方法進行修改的技術,能夠在不影響編譯的情況下,修改字節碼。
java agent的作用
在字節碼這個層面對類和方法進行修改的技術,能夠在不影響編譯的情況下,修改字節碼。可以理解spring的aop技術
如何實現實現javaagent需要實現premain方法
必須在MANIFEST.MF文件中有Premain-Class
demo實現 agentpackage com.xueyou.demo.agent; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.CtNewMethod; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.security.ProtectionDomain; public class FirstAgent implements ClassFileTransformer { public final String injectedClassName = "com.xueyou.agentdemo.App"; public final String methodName = "hello"; public byte[] transform(ClassLoader loader, String className, Class> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { className = className.replace("/", "."); // System.out.println(className); if (className.equals(injectedClassName)) { CtClass ctclass = null; try { ctclass = ClassPool.getDefault().get(className);// 使用全稱,用于取得字節碼類<使用javassist> CtMethod ctmethod = ctclass.getDeclaredMethod(methodName);// 得到這方法實例 ctmethod.insertBefore("System.out.println(11111111);"); return ctclass.toBytecode(); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } return null; } }預加載類
package com.xueyou.demo; import com.xueyou.demo.agent.FirstAgent; import java.lang.instrument.Instrumentation; /** * Hello world! */ public class App { public static void premain(String agentOps, Instrumentation inst) { System.out.println("=========premain方法執行========"); System.out.println(agentOps); // 添加Transformer inst.addTransformer(new FirstAgent()); } }maven指定預加載類
如何使用org.apache.maven.plugins maven-compiler-plugin 1.8 utf-8 org.apache.maven.plugins maven-shade-plugin 3.0.0 package shade com.xueyou.demo.App
這里有兩種方式指定javaagent:
1)使用命令行:java -javaagent:XXX.jar ffffd.jar
2)使用idea的vm option選項。
轉: https://blog.csdn.net/wild46c...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76488.html
摘要:介紹是插件或者叫做代理,她是運行在方法之前,她內定的方法名稱叫。是不是很簡單啊。。。。接下來,我們看看使用方式咯。。。。。注意包的結構要一樣哦。。。。。好了,今天的文章到這里就結束了。。。最后還來一張運行結果吧。。。。 java agent介紹 java agent是jvm插件或者叫做代理,她是運行在main方法之前,她內定的方法名稱叫premain。 java agent 概述 s...
摘要:注入機制作為工作的基礎,也為無侵入捕獲應用數據提供可能。代碼注入機制結合和技術,在應用字節碼加載到之前進行字節碼改寫。當然,修改字節碼文件流的動作是在中進行的。 UAVStack的中間件增強框架專題(MOF)】為大家詳細講述UAV中的MOF Agent是如何借助javaagent(premain)和javaassist技術在對應用無侵入的前提下完成數據捕獲的。歡迎繼續關注UAVStac...
摘要:簡介是命令的一個參數。參數可以用于指定一個包,并且對該包有個要求這個包的文件必須指定項。重點就在方法,也就是我們今天的標題。和類加載器比較類加載器也可以實現運行時修改代碼。使用能讓修改字節碼這個動作化于無形,對業務透明,減少侵入性。 簡介 java agent是java命令的一個參數。參數 javaagent 可以用于指定一個 jar 包,并且對該 java 包有2個要求: 這個 j...
摘要:最黑科技的玩法就是字節碼編程,也就是動態修改或是動態生成字節碼。使用字節碼編程可以玩出很多高級玩法,其中最高級的玩法是在程序運行時進行字節碼修改和代碼注入。 showImg(https://segmentfault.com/img/bVbkqqg?w=1142&h=640);這個是我訂閱 陳皓老師在極客上的專欄《左耳聽風》,我貼出來是為了自己以后方便學習和記憶,同時也分享給你們一起學習...
摘要:背景目前應用越來越廣泛,但和的體系接入困難,所以我們需要實現端的邏輯。使用實現一個可用的完全沒有問題,最簡單的實現則是在對應集群注冊接口與機器的映射關系,便可以訪問對應接口。在評估了各種實現方案后,決定放棄開發端,使用的模式。 背景 目前nodejs應用越來越廣泛,但和java的dubbo體系接入困難,所以我們需要實現node端的dubbo provider邏輯。java的dubbo ...
閱讀 1355·2019-08-30 15:44
閱讀 2099·2019-08-30 11:04
閱讀 518·2019-08-29 15:17
閱讀 2540·2019-08-26 12:12
閱讀 3133·2019-08-23 18:09
閱讀 922·2019-08-23 15:37
閱讀 1522·2019-08-23 14:43
閱讀 2920·2019-08-23 13:13