因为Spring的Bean扫描和Spring-MVC的Bean扫描是分开的, 两者的Bean位于两个不同的Application, 而且Spring-MVC的Bean扫描要早于Spring的Bean扫描, 所以当Controller Bean生成完成后, 再执行Spring的Bean扫描,Spring会发现要被AOP代理的Controller Bean已经在容器中存在, 配置AOP就无效了.

同样这样的情况也存在于数据库事务中, 如果Service的Bean扫描配置在spring-mvc.xml中, 而数据库事务管理器配置在application.xml中, 会导致数据库事务失效, 原理一样.

所以这里 ,我们需要把AOP放置在Controller扫描配置的文件中(注意这里这样做是为了拦截控制器层)


<aop:aspectj-autoproxy proxy-target-class="true"/><!-- 启用AspectJ对Annotation的支持 -->

<bean id="userInterceptor" class="cn.org.sso.www.logs.UserLogs"></bean>切面类
    <context:component-scan base-package="cn.org.sso.www.controller" use-default-filters="true">
    </context:component-scan>



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐