- 静态代理:在程序运行前就已经存在的编译好的代理类是为静态代理。首先,定义业务接口;其次,实现业务接口;然后,定义代理类并实现业务接口;最后便可通过客户端进行调用。
- 动态代理:在程序运行期间根据需要动态创建代理类及其实例来完成具体的功能是为动态代理。
- spring中AOP基于两种代理模式:JDK代理模式(需要目标对象实现接口),cglib代理模式(基于类的代理,无需实现接口)。
- 代理模式的目的就是为真实业务对象提供一个代理对象以控制对真实业务对象的访问,代理对象的作用有:
- 代理对象存在的价值主要用于拦截对真实业务对象的访问;
- 代理对象具有和目标对象(真实业务对象)实现共同的接口或继承于同一个类;
- 代理对象是对目标对象的增强,以便对消息进行预处理和后处理。
1、静态代理
Count.java接口:
CountImpl.java类:
代理类:
CountProxy.java类:
测试类:
Test.java类:
2、jdk动态代理
Count.java接口:
CountImpl.java类:
CountProxy.java类:
其中newProxyInstance()方法:源码
Test.java类: