使用javassist对类做字节码增强

业务背景

在日常开发中我们依赖的三方库里的类是无法改动的. 但可以使用javassist 在启动时对类的字节码做改动.达到修改类的作用

实现方式

java 复制代码
@Slf4j
public class JeeSiteJavassistShiroByteCode {

    public static void install() {
        try {
            ClassPool pool = ClassPool.getDefault();
            CtClass cc = pool.get("com.jeesite.common.mybatis.mapper.xmltags.IiIiiiiIiiiI");
            cc.defrost();
            CtMethod m = cc.getDeclaredMethod("doGetAuthenticationInfo");
            CtMethod m2 = cc.getDeclaredMethod("getAuthorizationInfo");
            m.insertAfter("{ System.out.println(\"doGetAuthenticationInfo: \"+com.alibaba.fastjson.JSONObject.toJSONString($_)+\"  :   \"+com.alibaba.fastjson.JSONObject.toJSONString($1)); }");
            m2.insertAfter("{ System.out.println(\"getAuthorizationInfo: \"+com.alibaba.fastjson.JSONObject.toJSONString($_)+\"  :   \"+com.alibaba.fastjson.JSONObject.toJSONString($1)); }");
            cc.writeFile(".");
            cc.toClass();
        } catch (Exception e) {
            log.error("bytecode modify failed.", e);
        }
    }
}

利用javassist 可以将方法的入参和返回值打印出来.

启用javassist

java 复制代码
   public static void main(String[] args) {
        JeeSiteJavassistShiroByteCode.install();
        SpringApplication.run(MesApplication.class, args);
    }

在启动之前对类的字节码做修改

相关推荐
m0_716765232 分钟前
C++提高编程--STL初识、string容器详解
java·开发语言·c++·经验分享·学习·青少年编程·visual studio
Memory_荒年3 分钟前
马年驯服不稳定服务:Resilience4j 容错救星驾到!
java·后端
卓怡学长3 分钟前
m278基于web的在线教学质量评价系统
java·数据库·spring·tomcat·maven·intellij-idea
程序员buddha3 分钟前
Java面试八股文Redis篇
java·redis·面试
rannn_1117 分钟前
【Redis|实战篇4】黑马点评|分布式锁
java·数据库·redis·分布式·后端
wapicn998 分钟前
智能识别技术在生活服务领域的落地应用与前景展望
java·c++·人工智能·python·php
umeelove3517 分钟前
Spring 循环依赖
java·后端·spring
用户32951257590624 分钟前
Day05-数组和面向对象基础
java
若鱼191929 分钟前
SpringBoot4+Kafka4 - 生产环境故障 - 消费者执行时间太长导致消息无限循环投递
java·spring·kafka
serve the people29 分钟前
LLaMA-Factory微调数据的清洗与指令构造方法
java·服务器·llama