cglib是动态代理的实现包
与jdk动态代理的差异在于前者被代理的类,不需要实现任何接口,该包动态生成被代理类的子类并代理其中的所有方法(某些特殊情况除外,具体参考cglib详细使用的文章)
public static void main(String[] args) {
//生成cglib增强器,相当于工厂类
Enhancer enhancer = new Enhancer();
//传入被代理的类
enhancer.setSuperclass(TargetClass.class);
//构建cglib中被代理方法详情类
Callback callback = new MethodInterceptor() {
@Override
public Object intercept(Object obj, Method method,
Object[] args, MethodProxy proxy) {
Object result = null;
//根据方法名对特定方法进行增强
if(StringUtils.equals(method.getName(), "run")) {
beforeEnhance();//前增强
result = proxy.invokeSuper(obj, args);
afterEnhance();//后增强
}else{
result = proxy.invokeSuper(obj, args);
}
return result;
}
};
//将被代理方法详情对象传递给工厂类
enhancer.setCallback(callback);
//生成代理类
TargetClass targetClass = (TargetClass)enhancer.create(