CGLIB动态代理应用

1.可以代理普通类,也可以代理interface

2.Enhancer类,

enhancer.setSuperClass(被代理类的或interface的 class对象)

Enhancer enhancer = new Enhancer();

enhancer.setSuperclass(UserService.class);

enhancer.setCallback(Callback的子类实例对象 -> 程序员自己写的实现类); 

3.常用的CallBack的子接口有

  interface MethodInterceptor{

  Object intercept(Object var1, Method var2, Object[] var3, MethodProxy var4) throws Throwable;

  }

  interface InvocationHandler{

    Object invoke(Object var1, Method var2, Object[] var3) throws Throwable;

  }

  interface NoOp extends Callback { //这个接口就是什么都不做没有切面逻辑

    NoOp INSTANCE = new NoOp() {

    };

  }

4.setCallBacks可以设置多个callbacks

enhance.setCallBacks(new CallBack[]{backs1,backs2})

可以通过CallbackFilter指定代理类的方法走对应的callback。

enhancer.setCallbackFilter(new CallbackFilter() {

@Override

public int accept(Method method) {

if("test".equals(method.getName())){

//代理类的test方法走第1个callback - backs1

return 0;

}else if("test1".equals(method.getName())){

//代理类的test方法走第2个callback - backs2

return 1;

}else {

//其他方法默认走第1个

return 0;

}

}

});

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容