动态代理应用场景 Java

package com.lcj.dongtaidaili;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class 动态代理 {
/**
 * 动态代理:
 * 最明显的功能就是可以实现方法过滤,从而在需要的方法上添加上额外功能
 * 
 * @author aniu520
 *
 */
 interface 演员{
    public void 演电影();
    public void 签合同();
}

public static class 范冰冰  implements 演员{

        public void 演电影(){
            System.out.println("范冰冰 演");
        }

        public void 签合同(){
            System.out.println("范冰冰 签");

        }
    }
public static void main(String [] args){

      //内部类使用的变量需要final修饰
      final 范冰冰 fan = new 范冰冰();
      System.out.println("-----没有代理之前-----");
      fan.演电影();
      fan.签合同();

      演员 fanDaili = (演员)Proxy.newProxyInstance(fan.getClass().getClassLoader(), fan.getClass().getInterfaces(), new InvocationHandler(){

          //传入的借口方法,都会被此方法过滤,也叫代理
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
            //如果是签合同,代理帮签也可以
            if("签合同".equals(method.getName())){
                System.out.println("代理帮范冰冰 签合同");
                return null;

            }else{
                return method.invoke(fan,args);
            }
        }

      });
      System.out.println("-----有代理后-----");
      fanDaili.演电影();
      fanDaili.签合同();


    }

}
/*
  -----没有代理之前-----
范冰冰 演
范冰冰 签
-----有代理后-----
范冰冰 演
代理帮范冰冰 签合同
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值