简介
代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
静态代理
创建接口
1 | interface Factory{ |
创建被代理类
1 | //被代理类 |
1 | //代理类,用于增强方法 |
测试
1 | public class Test1 { |
缺点:静态代理时,每一个被代理类都需要各自创建一个代理类
动态代理
创建接口
1 | interface NewFactory{ |
创建被代理类
1 | class LiNing implements NewFactory{ |
创建一个类用来生成代理对象
1 | class ProxyFactory2{ |
测试
1 | public class Test2 { |
cglib代理
创建代理工厂
1 | public class CglibProxyFactory { |
MyMethodInterceptor
1 | public class MyMethodInterceptor implements MethodInterceptor { |
测试
1 | MyMethodInterceptor myMethodInterceptor = new MyMethodInterceptor(); |
总结
代理模式就是为了增强方法,其中JDK代理和Cglib动态代理的区别如下:
- 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
- 如果目标对象实现了接口,可以强制使用CGLIB实现AOP
就是说,JDK代理只能代理那些有接口的,通过实现同一个接口实现,而CGLIB则是通过继承被代理类来生成代理对象。