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;

}

}

});

你可能感兴趣的:(CGLIB动态代理应用)