cglib简介
GitHub:https://github.com/cglib/cglib/
cglib是一款开源的动态代理库,与JDK动态代理基于接口的代理机制不同,cglib通过为被代理的类生成一个子类并重写被代理的方法实现代码的动态植入。
因此,cglib无法代理被final
修饰的类或方法以及静态方法。
cglib的官方介绍如下:
cglib - Byte Code Generation Library is high level API to generate and transform Java byte code. It is used by AOP, testing, data access frameworks to generate dynamic proxy objects and intercept field access.
cglib导入依赖
通过查看cglib项目的pom.xml
文件,可以发现cglib内部依赖了ams.jar
,因此除了导入cglib.jar还需要导入ams.jar,使用Maven导入或下载相应的jar包即可。
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>cglib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>${asm.version}</version>
</dependency>
</dependencies>
cglib基本用法
以下是cglib的基本用法,更详细的用法请参阅官方案例。
// 1. 创建Enhancer对象
Enhancer enhancer = new Enhancer();
// 2. 指定父类Class对象
enhancer.setSuperclass(Person.class);
// 3. 设置方法拦截回调
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object object, Method method, Object[] args, MethodProxy proxy) {
// before...
Object result = proxy.invokeSuper(object, args);
// after..
return result;
}
});
// 4. 创建被代理的对象
Person person = (Person) enhancer.create();
person.speak();
总结
cglib基于AMS框架实现,是JDK动态代理的有效补充,可以用于AOP编程,比如日志打印、安全控制、统一鉴权等。
因为AMS框架是基于.class
字节码的,因为无法用于android平台。
网友评论