在controller中使用AOP的问题主要在于如何让controller能够被检测到。
controller和其他spring bean的区别在于:controller是由mvc定义并在web.xml中的dispatcher中定义的。
Controller的AOP需要写在servlet.xml里
servlet.xml文件头 需要有
aop的namespace
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
bean配置
<aop:aspectj-autoproxy/>
<!-- <bean class="com.datasource.DynamicDataSourceAspect" /> -->
<bean id="dataSourceInterceptor" class="com.datasource.DataSourceInterceptor" />
<aop:config>
<aop:aspect id="dataSourceAspect" ref="dataSourceInterceptor">
<aop:pointcut id="dsSqlServer" expression="within(com..*)" />
<aop:before method="setdataSourceSqlServer" pointcut-ref="dsSqlServer"/>
</aop:aspect>
</aop:config>

本文探讨了Spring MVC环境下,AOP在Controller中失效的原因,指出Controller与普通Spring Bean的区别。解决方案在于将AOP配置写入servlet.xml,并确保包含正确的AOP命名空间和Bean配置。
4031

被折叠的 条评论
为什么被折叠?



