1.可以代理普通類,也可以代理interface
2.Enhancer類,
enhancer.setSuperClass(被代理類的或interface的 class對(duì)象)
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(UserService.class);
enhancer.setCallback(Callback的子類實(shí)例對(duì)象 -> 程序員自己寫的實(shí)現(xiàn)類);?
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 { //這個(gè)接口就是什么都不做沒有切面邏輯
? ? NoOp INSTANCE = new NoOp() {
? ? };
? }
4.setCallBacks可以設(shè)置多個(gè)callbacks
enhance.setCallBacks(new CallBack[]{backs1,backs2})
可以通過CallbackFilter指定代理類的方法走對(duì)應(yīng)的callback。
enhancer.setCallbackFilter(new CallbackFilter() {
@Override
public int accept(Method method) {
if("test".equals(method.getName())){
//代理類的test方法走第1個(gè)callback - backs1
return 0;
}else if("test1".equals(method.getName())){
//代理類的test方法走第2個(gè)callback - backs2
return 1;
}else {
//其他方法默認(rèn)走第1個(gè)
return 0;
}
}
});