资讯专栏INFORMATION COLUMN

使用bytebuddy构建agent

microelec / 2990人阅读

摘要:使用固定引入实例使用自己构建的通过使用,便捷地创建

使用固定agent 引入pom
 
            net.bytebuddy
            byte-buddy
            1.4.16
        
        
            net.bytebuddy
            byte-buddy-agent
            1.4.16
        
实例
public static void installAgent(){
        ByteBuddyAgent.install();
        AgentBuilder agentBuilder = new AgentBuilder.Default()
                .type(nameStartsWith("com.codecraft.demo")
                        .and(not(isInterface()))
                        .and(not(isStatic()))
                .transform((builder,typeDescription,classLoader) -> builder
                        .method(ElementMatchers.any())
                        .intercept(MethodDelegation.to(TraceInterceptor.class)
                );
agentBuilder.installOnByteBuddyAgent();
使用自己构建的agent
    public static void premain(String argument, Instrumentation inst) {
        System.out.println("start premain)");

        new AgentBuilder.Default()
                .type(nameStartsWith("com.codecraft.demo").and(not(isInterface())).and(not(isStatic())))
                .transform((builder,typeDescription,classLoader) -> builder
                        .method(ElementMatchers.any())
                        .intercept(MethodDelegation.to(TraceInterceptor.class)
                )
                ).with(new AgentBuilder.Listener(){

            @Override
            public void onTransformation(TypeDescription typeDescription, ClassLoader classLoader, JavaModule javaModule, DynamicType dynamicType) {

            }

            @Override
            public void onIgnored(TypeDescription typeDescription, ClassLoader classLoader, JavaModule javaModule) {

            }

            @Override
            public void onError(String s, ClassLoader classLoader, JavaModule javaModule, Throwable throwable) {
                throwable.printStackTrace();
            }

            @Override
            public void onComplete(String s, ClassLoader classLoader, JavaModule javaModule) {

            }
        })
                .installOn(inst);
    }
pom

                org.apache.maven.plugins
                maven-compiler-plugin
                
                
                    ${java.version}
                    ${java.version}
                    ${project.build.sourceEncoding}
                
            

                org.apache.maven.plugins
                maven-assembly-plugin
                2.6
                
                    
                        jar-with-dependencies
                    
                    ${project.artifactId}-${project.version}
                    false
                    
                        
                            ${premain}
                            ${premain}
                        
                    
                
                
                    
                        assemble-all
                        package
                        
                            single
                        
                    
                
            
docs

通过使用Byte Buddy,便捷地创建Java Agent

bytebuddy-tutorial

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65204.html

相关文章

  • java agent开发

    摘要:介绍是插件或者叫做代理,她是运行在方法之前,她内定的方法名称叫。是不是很简单啊。。。。接下来,我们看看使用方式咯。。。。。注意包的结构要一样哦。。。。。好了,今天的文章到这里就结束了。。。最后还来一张运行结果吧。。。。 java agent介绍 java agent是jvm插件或者叫做代理,她是运行在main方法之前,她内定的方法名称叫premain。 java agent 概述 s...

    妤锋シ 评论0 收藏0
  • Java调用链跟踪关键技术(二)Javaagent

    摘要:一网上关于的介绍很多,请找度娘和谷兄。唯一提的一点是字节码注入比较好用的是,封装度很高,使用简单。二代码样例以下为关键代码样例,可以依样画瓢自行改造。加入栈实战营知识星球,参与讨论,更多实战代码分享,不就是几斤苹果,几个荣耀道具的事吗 一、Javaagent 网上关于Javaagent的介绍很多,请找度娘和谷兄。唯一提的一点是字节码注入比较好用的是bytebuddy,封装度很高,使用简...

    geekzhou 评论0 收藏0
  • 程序员练级攻略(2018):Java底层知识

    摘要:最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成字节码。使用字节码编程可以玩出很多高级玩法,其中最高级的玩法是在程序运行时进行字节码修改和代码注入。 showImg(https://segmentfault.com/img/bVbkqqg?w=1142&h=640);这个是我订阅 陈皓老师在极客上的专栏《左耳听风》,我贴出来是为了自己以后方便学习和记忆,同时也分享给你们一起学习...

    wean 评论0 收藏0
  • serverless在微店node领域的探索应用

    摘要:参与者流量来自于内部系统和外部流量,其中大部分来自于外部流量。水平扩容服务的水平扩容重要性不言而喻。 背景 目前微店中台团队为了满足公司大部分产品、运营以及部分后端开发人员的尝鲜和试错的需求,提供了一套基于图形化搭建的服务端接口交付方案,利用该方案及提供的系统可生成一副包含运行时环境定义可立即运行的工程代码,最后,通过 某种serverless平台 实现生成后代码的部署、CI、运行、反...

    mikyou 评论0 收藏0
  • 新一代 CI 持续集成工具 flow.ci 正式开源

    摘要:很高兴地宣布在协议下正式开源了。是国内首套开源持续集成解决方案,帮助企业团队实现开发流程自动化,快速持续交付高质量软件。官方网站开源地址以此,你可以将功能完整的持续集成服务部署到内网使用。 很高兴地宣布 flow.ci 在 Apache-2.0 协议下正式开源了。flow.ci 是国内首套开源持续集成(CI) 解决方案,帮助企业团队实现开发流程(build-test-deploy)自动...

    endless_road 评论0 收藏0

发表评论

0条评论

microelec

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<