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;
}
}
});