一 、动态代理的优点
1.它不用去关心被代理的类到底是怎样的,可以与被代理的类完全解耦,从而灵活的运用到不同的应用场景中。
2.业务代码内,当需要增强的业务逻辑非常通用(如:添加log,重试,统一权限判断等)时,使用动态代理将会非常简单。即使业务逻辑实现的接口不同,也不需要修改或者新增代理类。如果每个方法增强逻辑不同,那么静态代理更加适合。
3.使用静态代理时,如果代理类和被代理类同时实现了一个接口,当接口方法有变动时,代理类也必须同时修改。
二、AOP织入代码的时机
1,编译时织入,代表技术:AspectJ
2.类加载时织入,代表技术:Aspect5+
3.运行时织入,代表技术:Spring AOP,运行时织入使用了动态代理
三、动态代理的两种实现方式:
1.jdk动态代理,基于接口
2.cglib动态代理,基于继承