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
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="GBK"?>
<!-- 1.在beans上.引入aop -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 2.启动@AspectJ支持 -->
<aop:aspectj-autoproxy />
</beans>

当然,如果希望完全启动Spring的”零配置”功能,则还需要采用如8.2节所示的方式进行配置。

自动增强

所谓自动增强,指的是Spring会判断一个或多个切面是否需要对指定Bean进行增强,并据此自动生成相应的代理,从而使得增强处理在合适的时候被调用

使用Bean后处理器启用@AspectJ支持

如果不打算使用SpringXML Schema配置方式,则应该在Spring配置文件中增加如下片段来启用@AspectJ支持。

1
2
<!-- 启用@AspectJ支持 -->
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator">

上面配置文件中的AnnotationAwareAspectJAutoProxyCreator是一个Bean后处理器,该Bean后处理器将会为容器中符合条件的Bean生成AOP代理。

启用@AspectJ支持需要导入的jar包

为了在Spring应用中启动@AspectJ支持,还需要在应用的类加载路径下增加aspectjweaver.jaraspectjrt.jar这两个JAR库,这两个jar包位于Aspect安装路径下的lib目录中。
除此之外,Spring AOP还需要依赖一个aopalliance.jar.