Spring对AOP的支持
Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。Spring创建代理的规则为:
1、默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
2、当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB
SpringAOP局限性
只能对spring管理的bean增加aop功能
AOP 底层技术比较
AOP技术 | 功能 | 性能 | 面向接口编程 | 编程难度 | 使用场合 |
---|---|---|---|---|---|
直接编辑class 文件 | 完全控制类 | 无明显性能代价 | 不要求 | 高,要求对 class 文件结构和 Java 字节码有深刻了解 | 对class字节码结构深入了解,且只需要改动很小 |
JDK Instrument | 完全控制类 | 无论是否改写,每个类装入时都要执行 hook 程序 | 不要求 | 高,要求对 class 文件结构和 Java 字节码有深刻了解 | 更适用于监控和控制虚拟机的行为 |
JDK Proxy | 只能改写 method | 反射引入性能代价 | 要求 | <