java 静态代理 动态代理

代理模式作用:
     屏蔽真实行为的访问,让程序更加安全。

     可以对真实行为的调用进行控制。

一个典型的代理模式有三要素

     1.代理类与被代理类要实现同一个接口.
     2.在代理类中持有被代理对象.

     3.在代理类中调用被代理的行为。

即:

共同接口
public interface Action {
    public void doSomething();

}

真实对象
public class RealObject implements Action{
    public void doSomething() {
        System.out.println("do something");
    }

}

代理对象
public class Proxy implements Action {
    private Action realObject;
    public Proxy(Action realObject) {
        this.realObject = realObject;
    }
    public void doSomething() {
        System.out.println("proxy do");
        realObject.doSomething();
    }
}
运行代码
    Proxy proxy = new Proxy(new RealObject());

    proxy.doSomething();

这样就可以不用创建 真实对象了, 只是创建代理对象 就可以做到真实对象做的事情了。

可以很好的隐藏真实对象。

然后再在代理类中相同的方法里面加些东西,就可以为原功能进行扩展了。

一般将这种代理模式称为静态代理

静态代理的优点和缺点

这种代理模式的优点: 扩展原功能,不侵入原代码。

这种代理模式的缺点:如果有多个真实类对象,要么创建多个代理类,要么一个代理类添加多个接口,但都很繁琐。


动态代理

     通过使用动态代理,我们可以通过在运行时,动态生成一个持有RealObject、并实现代理接口的Proxy,同时注入我们相同的扩展逻辑

也就是输入被代理对象、接口  就可以得到一个代理对象,然后执行代理对象的方法。

一般有两种方式:
  1.通过jdk中提供的Proxy类来实现
   这种方式要求,被代理类必须实现接口。
   简单说,只能为接口做代理.
  2.通过cglib来实现。

   它不要求,实现接口。

jdk动态代理 需要输入被代理对象、接口

cglib不要求输入接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值