【spring aop 横切controller 切点切入有问题 _spring 】 | IT修真院·坑乎
问题已收录 spring aop 横切controller 切点切入有问题
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(1)
spring
详细描述
错误截图
编辑于2024-11-24
  • [无名弟子]黄*彬
    0

    因为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扫描配置的文件中.

    Spring的配置文件application.xml包含了 开启AOP自动代理,Service扫描配置, 现在只包含了service的自动扫描配置

    << span="">aop:aspectj-autoproxy/>
    << span="">context:annotation-config/>
    << span="">context:component-scan base-package="controller"/>

    << span="">context:component-scan base-package="service"/>

    << span="">context:component-scan base-package="aop"/>

     

    Spring MVC的配置文件spring-mvc.xml主要内容是Controller层的自动扫描配置,添加了开启AOP自动代理,以及Aspect的自动扫描配置

    << span="">context:annotation-config/>

    << span="">mvc:annotation-driven/>

    << span="">context:component-scan base-package="controller"/>

    << span="">mvc:default-servlet-handler/>

    << span="">aop:aspectj-autoproxy/>


    编辑于2018-10-19