Java字节码增强

通常对一个方法增加日志记录,安全检查都会说采用AOP或CGLIB动态代理,但无论哪种方式都必需改变原有的调用方式;
同时,大量的反射调用也必增加系统的开销。下面介绍一种不需要改变客户端调用方式而又能实现对指定方法增加缓存或日志的方式,那就是——字节码增强!

 

 

 在实际项目中通常需要对一些频繁访问数据库的方法采用对象缓存,从而提高系统性能减少不必要的网络开销。
这时候一般我们会去修改方法的源码,增加Cache的put,get调用,要么采用AspectJ或cglib进行方法执行前或执行后的拦截

但采用无论采用哪种方式都必需改变客户端原有的调用方式,可能涉及变动的模块又零散(如对Account,Bank,Customer对象增加Log或Cache),况且如果对于遗留系统而又没有源码呢?

因此采用字节码增强成立一种可选的手段,允许在不改变原调用方式的情况下进行字节码增强

最直接的改造 Java 类的方法莫过于直接改写 class 文件。Java 规范详细说明了class 文件的格式,直接编辑字节码确实可以改变 Java 类的行为。操作字节码开源实现有ObjectWeb ASM,JBOSS Javassist等

你可能感兴趣的:(java)