本文主要是介绍使用javassist对类做字节码增强,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
业务背景
在日常开发中我们依赖的三方库里的类是无法改动的. 但可以使用javassist 在启动时对类的字节码做改动.达到修改类的作用
实现方式
@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
public static void main(String[] args) {JeeSiteJavassistShiroByteCode.install();SpringApplication.run(MesApplication.class, args);}
在启动之前对类的字节码做修改
这篇关于使用javassist对类做字节码增强的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!