要求:被代理类不能是final的,因为代理对象会是它的子类
提供者:第三方CGLib
涉及的类:Enhancer
创建代理对象的方法:create(Class,Callback);
例子:
首先导入第三方jar包:asm-3.2.jar、cglib-2.1.90.jar
public void subProxy(){
final MyActor actor = new MyActor();
MyActor myactor = (MyActor) Enhancer.create(actor.getClass(), new MethodInterceptor() {
@Override
public Object intercept(Object arg0, Method method, Object[] arg2,
MethodProxy arg3) throws Throwable {
int money = (int) arg2[0];
if("perform".equals(method.getName())){
if(money>10000)
method.invoke(actor, arg2);
}else if("dangerPerform".equals(method.getName())){
if(money>50000)
method.invoke(actor, arg2);
}
return null;
}
});
myactor.perform(10001,"dimples");
myactor.dangerPerform(50001);
}
}