Spring依然采用运行时生成动态代理的方式来增强目标对象,所以它不需要增加额外的编译,也不需要AspectJ的织入器支持;而AspectJ采用编译时增强,所以AspectJ需要自己的编译器来编译Java文件,还需要织入器。
Spring中启用对@AspectJ切面配置的支持:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!-- 启动@AspectJ支持 -->
<aop:aspectj-autoproxy/>
</beans>
以及
<!-- 启动@AspectJ支持 -->
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>
Spring应用中启动@AspectJ支持还需要在应用的类加载路径下添加AspectJ库:
aspectjweaver.jar
aspectjrt.jar
以上两个jar文件直接在AspectJ安装目录的lib中获取,Spring AOP还需要依赖aopalliance.jar。
网友评论