成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java agent 使用

mingde / 1812人閱讀

摘要:的作用在字節(jié)碼這個(gè)層面對(duì)類和方法進(jìn)行修改的技術(shù),能夠在不影響編譯的情況下,修改字節(jié)碼。

java agent的作用

在字節(jié)碼這個(gè)層面對(duì)類和方法進(jìn)行修改的技術(shù),能夠在不影響編譯的情況下,修改字節(jié)碼??梢岳斫鈙pring的aop技術(shù)

如何實(shí)現(xiàn)

實(shí)現(xiàn)javaagent需要實(shí)現(xiàn)premain方法

必須在MANIFEST.MF文件中有Premain-Class

demo實(shí)現(xiàn) agent
  package 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);// 使用全稱,用于取得字節(jié)碼類<使用javassist>
                    CtMethod ctmethod = ctclass.getDeclaredMethod(methodName);// 得到這方法實(shí)例
                    ctmethod.insertBefore("System.out.println(11111111);");
                    return ctclass.toBytecode();
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                    e.printStackTrace();
                }
            }
            return null;
        }
    }
預(yù)加載類
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方法執(zhí)行========");
        System.out.println(agentOps);
        // 添加Transformer
        inst.addTransformer(new FirstAgent());
    }
}
maven指定預(yù)加載類

        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    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選項(xiàng)。

轉(zhuǎn): https://blog.csdn.net/wild46c...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76488.html

相關(guān)文章

  • java agent開發(fā)

    摘要:介紹是插件或者叫做代理,她是運(yùn)行在方法之前,她內(nèi)定的方法名稱叫。是不是很簡單啊。。。。接下來,我們看看使用方式咯。。。。。注意包的結(jié)構(gòu)要一樣哦。。。。。好了,今天的文章到這里就結(jié)束了。。。最后還來一張運(yùn)行結(jié)果吧。。。。 java agent介紹 java agent是jvm插件或者叫做代理,她是運(yùn)行在main方法之前,她內(nèi)定的方法名稱叫premain。 java agent 概述 s...

    妤鋒シ 評(píng)論0 收藏0
  • UAV MOF工作原理之Agent注入機(jī)制原理

    摘要:注入機(jī)制作為工作的基礎(chǔ),也為無侵入捕獲應(yīng)用數(shù)據(jù)提供可能。代碼注入機(jī)制結(jié)合和技術(shù),在應(yīng)用字節(jié)碼加載到之前進(jìn)行字節(jié)碼改寫。當(dāng)然,修改字節(jié)碼文件流的動(dòng)作是在中進(jìn)行的。 UAVStack的中間件增強(qiáng)框架專題(MOF)】為大家詳細(xì)講述UAV中的MOF Agent是如何借助javaagent(premain)和javaassist技術(shù)在對(duì)應(yīng)用無侵入的前提下完成數(shù)據(jù)捕獲的。歡迎繼續(xù)關(guān)注UAVStac...

    atinosun 評(píng)論0 收藏0
  • java agent 詳細(xì)介紹

    摘要:簡介是命令的一個(gè)參數(shù)。參數(shù)可以用于指定一個(gè)包,并且對(duì)該包有個(gè)要求這個(gè)包的文件必須指定項(xiàng)。重點(diǎn)就在方法,也就是我們今天的標(biāo)題。和類加載器比較類加載器也可以實(shí)現(xiàn)運(yùn)行時(shí)修改代碼。使用能讓修改字節(jié)碼這個(gè)動(dòng)作化于無形,對(duì)業(yè)務(wù)透明,減少侵入性。 簡介 java agent是java命令的一個(gè)參數(shù)。參數(shù) javaagent 可以用于指定一個(gè) jar 包,并且對(duì)該 java 包有2個(gè)要求: 這個(gè) j...

    zhiwei 評(píng)論0 收藏0
  • 程序員練級(jí)攻略(2018):Java底層知識(shí)

    摘要:最黑科技的玩法就是字節(jié)碼編程,也就是動(dòng)態(tài)修改或是動(dòng)態(tài)生成字節(jié)碼。使用字節(jié)碼編程可以玩出很多高級(jí)玩法,其中最高級(jí)的玩法是在程序運(yùn)行時(shí)進(jìn)行字節(jié)碼修改和代碼注入。 showImg(https://segmentfault.com/img/bVbkqqg?w=1142&h=640);這個(gè)是我訂閱 陳皓老師在極客上的專欄《左耳聽風(fēng)》,我貼出來是為了自己以后方便學(xué)習(xí)和記憶,同時(shí)也分享給你們一起學(xué)習(xí)...

    wean 評(píng)論0 收藏0
  • Nodejs“實(shí)現(xiàn)”Dubbo Provider

    摘要:背景目前應(yīng)用越來越廣泛,但和的體系接入困難,所以我們需要實(shí)現(xiàn)端的邏輯。使用實(shí)現(xiàn)一個(gè)可用的完全沒有問題,最簡單的實(shí)現(xiàn)則是在對(duì)應(yīng)集群注冊(cè)接口與機(jī)器的映射關(guān)系,便可以訪問對(duì)應(yīng)接口。在評(píng)估了各種實(shí)現(xiàn)方案后,決定放棄開發(fā)端,使用的模式。 背景 目前nodejs應(yīng)用越來越廣泛,但和java的dubbo體系接入困難,所以我們需要實(shí)現(xiàn)node端的dubbo provider邏輯。java的dubbo ...

    Charles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<