Java的三种代理模式
代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。
简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。
1.静态代理
静态代理的实现方式需要目标对象和代理对象实现同样的接口。
优点:可以在不修改目标对象的前提下,扩展目标对象的功能。
缺点:1.冗余:由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。
2.不易维护。一旦接口增加了方法,目标对象与代理对象都要进行修改。
2.动态代理
动态代理同个javaAPI,Proxy类实现。并且目标对象必须要实现一个接口。
3.cglib代理
通过cglib代理的方式,目标对象不需要实现接口,可以是一个单独的对象。
cglib也叫子类代理, 是通过以目标对象子类(继承目标对象)的方式类实现代理
在Spring的AOP编程中:
如果加入容器的目标对象有实现接口,用JDK代理
如果目标对象没有实现接口,用Cglib代理