spring AOP 基于代理(Proxy)的方式实现AOP
实现的方式是运行时代理
具体细节可以参考
JDK动态代理
Spring AOP基本概念
切面增强简单流程
spring 事务
AspectJ 是eclipse开源的一个面向切面编程项目.
是基于字节码织入的方式实现AOP, AspectJ提供两种方式的织入
- 编译时织入, 需要特殊的编译器,并配合AspectJ涉及的语言语法文件针对织入.
- 类加载时织入, 需要指定jvm代理,并配置aop.xml
从这两点得知,不能通过编写java代码实现AspectJ的织入,必须要通过特殊编译器或者jvm代理。
同时spring AOP完全兼容AspectJ的语法,即可以使用AspectJ的注解配置方式声明切面合增强,且通过代理实现AOP。
总结
Spring AOP的优势
- 纯java代码, 且兼容AspectJ的注解
- 配置简单
AspectJ的优势
- 字节码织入,运行时代码执行效率高
- 被织入对象的方法内调用同对象的方法也会走增强方法。
- 支持属性, finnal方法的增强。
Spring AOP的劣势
- 运行时代理,通过反射调用被代理对象,效率没有代码织入效率好
- 被代理对象方法内调用同一个对象的方法不会触发增强
- 只支持方法增强(且方法不能是finnal)
AspectJ
- 需要编写非java代码或者通过jvm代理,不能使用单纯的java代码整合到spring中.
网友评论