1、说明
动态生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法。为没有实现接口的类提供代理,是jdk动态代理很好的补充。应用场景,例如aop、hibernate。
2、简单实例
public class DogService {
public void sound() {
System.out.println("wang");
}
}
DogService dogService = new DogService();
// cglib动态代理
Enhancer enhancer = new Enhancer();
enhancer.setClassLoader(dogService.getClass().getClassLoader());
enhancer.setSuperclass(dogService.getClass());
MethodInterceptor methodInterceptor = new MethodInterceptor() {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)
throws Throwable {
System.out.println("before");
Object invoke = method.invoke(dogService, args);
System.out.println("after");
return invoke;
}
};
enhancer.setCallback(methodInterceptor);
DogService dogServiceProxy = (DogService) enhancer.create();
dogServiceProxy.sound();
测试结果
before
wang
after