1、基本概念
代理
指以他人的名义,在授权范围内进行对被代理人直接发生法律效力的法律行为。
静态代理
指由人创建或者工具生成的代理类,这个类在编译期就已经存在的。
动态代理
指代理类在编译期不存在,是在程序运行中自动生成的。
2、动态代理分类
JDK动态代理
基于java的反射机制并实现目标类的接口,动态生成代理类调用目标类的方法。
CGLIB 动态代理
基于继承目标类生成代理子类,不需要实现接口,只需要目标类是非final类即可。(底层是借助asm字节码技术)
AspectJ 动态代理
基于修改目标类的字节,织入代理的字节,在程序编译的时候插入动态代理的字节码,不会生成全新的Class。
3、例子
3.1、JDK动态代理
- 创建接口。
1 | public interface CalculateService { |
- 创建接口实现类。
1 | public class CalculateServiceImpl implements CalculateService{ |
- 创建获取代理类的通用代理
1 | public class MyProxy { |
- 主方法
1 | public class Main { |
3.2、CGLIB 动态代理
- 创建服务类
1 | public class CalculateService{ |
- 创建方法拦截器,用于在方法调用前后进行业务处理。
1 | public class MyMethodInterceptor implements MethodInterceptor { |
- 主方法。
1 | public class Main { |