1.可以代理普通類奋姿,也可以代理interface
2.Enhancer類,
enhancer.setSuperClass(被代理類的或interface的 class對象)
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(UserService.class);
enhancer.setCallback(Callback的子類實例對象 -> 程序員自己寫的實現(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 { //這個接口就是什么都不做沒有切面邏輯
? ? NoOp INSTANCE = new NoOp() {
? ? };
? }
4.setCallBacks可以設(shè)置多個callbacks
enhance.setCallBacks(new CallBack[]{backs1,backs2})
可以通過CallbackFilter指定代理類的方法走對應(yīng)的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;
}
}
});