81,094
社区成员
发帖
与我相关
我的任务
分享
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="logAspect" />
</aop:aspectj-autoproxy>
<bean id="logAspect" class="com.chip.annotation.SystemLogAspect" />
<aop:aspectj-autoproxy/>
代表启用@Aspectj 注解,
而且在spring-mvc.xml中也配置有一段启用@Aspectj注解的代码:
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="logAspect" />
</aop:aspectj-autoproxy>
<bean id="logAspect" class="com.chip.annotation.SystemLogAspect" /> //切面
applicationContext.xml中启用@Aspectj 注解的代码不能删除,删除后,就会拦截不到service层中的@AfterThrowing方法,但是@Before方法能进,现在功能是没问题了,担心项目中存在两个启用@Aspectj注解的代码会不会有问题。
查了下网上资料,如果AOP要拦截Controller层操作,必须把启用@Aspectj这段代码放到spring-mvc.xml中,这样才能拦截到Controller层。
考虑是不是配置文件加载顺序的问题,贴下我的配置文件,
applicationContext.xml:
<context:annotation-config/>
<aop:aspectj-autoproxy/>
<import resource="spring/db.xml"/> //数据库信息及全注解事物配置
<import resource="spring/cache.xml"/>
<import resource="spring/content.xml" /> //扫描service,dao及aop切面包并且过滤掉controller层
spring-mvc.xml:
<!-- 启动对@Aspectj注解支持,使用CGLIB生成代理方法,以便AOP拦截到Controller-->
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="logAspect" />
</aop:aspectj-autoproxy>
<bean id="logAspect" class="com.chip.annotation.SystemLogAspect" />
//以及其他配置文件,如只扫描controller层等等一些信息
现在这点有点迷糊,为何要配置两个同样的代码才会拦截到@AfterThrowing操作