• 动态代理


    作用:不改变源码的基础上对已有方法进行增强,他是AOP思想的实现技术,它分为两类:一类是基于接口的,另一个是基于子类的,这两种都有各自的应用场景,如dbcp就是用的是动态代理,c3p0就是使用静态代理装饰者模式。

    以下是代码:

    定义接口

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

    }

    接口实现类

    public class ActorImpl implements IAction {

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

    }

    代理类:

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

  • 相关阅读:
    【leetcode】面试题 01.04. 回文排列
    【leetcode】将数组分成和相等的三个部分
    【leetcode】杨辉三角
    【leetcode】杨辉三角 II
    【leetcode】判断路径是否相交
    【leetcode】路径总和
    【leetcode】山脉数组的峰顶索引
    053-4
    053-151
    053-272
  • 原文地址:https://www.cnblogs.com/niuyg928/p/10921720.html
Copyright © 2020-2023  润新知