代理模式之静态代理

静态代理
除cglib的代理外  被代理的类必须实现一个接口


public interface ProxyInterface {
    public void say(String str);
}

//下面是真正工作的实现类

public class ProxyImpl implements ProxyInterface {
    @Override
    public void say(String str) {
        System.out.println("ProxyImpl.say is " +str);
    }
}

//下面是静态代理类
public class ProxyStatic implements ProxyInterface {


    ProxyInterface proxyInterface;
    public ProxyStatic(ProxyInterface proxyInterface){
            this.proxyInterface = proxyInterface;
    }
    @Override
    public void say(String str) {
        System.out.println("在调用真正的方法前  执行的方法 可以用来保护真正的方法  做鉴权  限流  身份识别等");
        System.out.println("经过鉴别  参数需要转换 无论入什么参数都转换为静态代理");
        proxyInterface.say("静态代理");

        System.out.println("搞定");
    }
}

//可以看出  静态代理类与真正的实现类都是实现同一个接口  至于为啥这么搞呢  代码中说的很清楚了

//怎么用
public static void main(String[] args) {
        ProxyInterface proxyInterfac = new ProxyImpl();
        ProxyInterface ProxyInterface = new ProxyStatic(proxyInterfac);
        ProxyInterface.say("我说啥都没用");
    }



执行结果:
D:\development_tool\jdk1.8.0_181\bin\java.exe
在调用真正的方法前 执行的方法 可以用来保护真正的方法 做鉴权 限流 身份识别等
经过鉴别 参数需要转换 无论入什么参数都转换为静态代理
ProxyImpl.say is 静态代理
搞定

Process finished with exit code 0


静态代理的缺点:

  1. 代理类与实现类实现同一个接口 接口增加或减少方法都需要修改代理类
  2. 一个代理类只能代理一种接口的实现类,如果代理另一个接口,需要写新的实现类,需要代理的接口类型太多就会有太多的实现类

牢记静态代理的缺点才能更好掌握动态代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值