8.4.5 基于注解的 零配置 方式
8.4.5 基于注解的”零配置”方式
Spring使用AspectJ注解
AspectJ
允许使用注解定义切面
、切入点
和增强处理
,而Spring
框架则可识别并根据这些注解来生成AOP
代理。 Spring
只是使用了和AspectJ 5
一样的注解,但并没有使用AspectJ
的编译器或者织入器,底层依然使用的是Spring AOP
,依然是在运行时动态生成AOP
代理,并不依赖于AspectJ
的编译器或者织入器
简单地说, Spring
依然采用运行时生成动态代理
的方式来增强目标对象,所以它不需要増加额外的编译,也不需要AspectJ
的织入器攴持;而AspectJ
采用编译时增强,所以AspectJ
需要使用自己的编译器来编译Java
文件,还需要织入器。
Sping中启用@AspectJ支持
在Spring配置文件中开启对@AspectJ切面的支持
为了启用Spring
对@AspectJ
切面配置的支持,并保证Spring
容器中的目标Bean
被一个或多个切面自动增强
,必须在Spring
配置文件中配置如下片段:
1 |
|
当然,如果希望完全启动Spring
的”零配置”功能,则还需要采用如8.2节所示的方式进行配置。
自动增强
所谓自动增强,指的是Spring
会判断一个或多个切面是否需要对指定Bean
进行增强,并据此自动生成相应的代理,从而使得增强处理在合适的时候被调用
使用Bean后处理器启用@AspectJ支持
如果不打算使用Spring
的XML Schema
配置方式,则应该在Spring
配置文件中增加如下片段来启用@AspectJ
支持。
1 | <!-- 启用@AspectJ支持 --> |
上面配置文件中的AnnotationAwareAspectJAutoProxyCreator
是一个Bean
后处理器,该Bean
后处理器将会为容器中符合条件的Bean
生成AOP
代理。
启用@AspectJ支持需要导入的jar包
为了在Spring
应用中启动@AspectJ
支持,还需要在应用的类加载路径下增加aspectjweaver.jar
和aspectjrt.jar
这两个JAR
库,这两个jar
包位于Aspect
安装路径下的lib
目录中。
除此之外,Spring AOP
还需要依赖一个aopalliance.jar
.