動態代理

做用:不改變源碼的基礎上對已有方法進行加強,他是AOP思想的實現技術,它分爲兩類:一類是基於接口的,另外一個是基於子類的,這兩種都有各自的應用場景,如dbcp就是用的是動態代理,c3p0就是使用靜態代理裝飾者模式。ide

如下是代碼:代理

定義接口接口

public interface IAction {
public void comnActor(Float money);
public void dangerActor(Float money);get

}源碼

接口實現類io

public class ActorImpl implements IAction {class

@Override
public void comnActor(Float money) {
// TODO Auto-generated method stub
System.out.println("普通表演:"+money);
}基礎

@Override
public void dangerActor(Float money) {
// TODO Auto-generated method stub
System.out.println("危險表演:"+money);
}float

}方法

代理類:

public class ProxyAgent { @Test public void fun(){ //actor.comnActor(); final ActorImpl actor = new ActorImpl(); IAction actorProxy = (IAction) Proxy.newProxyInstance(actor.getClass().getClassLoader(), actor.getClass().getInterfaces(), new InvocationHandler() { Object retValue = null; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Float money = (Float) args[0]; if(method.getName().equals("comnActor")){ if(money>10000){ retValue = method.invoke(actor, money/2); } }if(method.getName().equals("dangerActor")){ if(money>50000){ retValue = method.invoke(actor, money/2); } } return retValue; } }); actorProxy.comnActor((float) 20000.00); actorProxy.dangerActor((float) 60000.00); }}

相關文章
相關標籤/搜索