问答详情
源自:2-3 使用AOP处理请求(下)

AOP语句不生效的原因

如果出现AOP不生效(即输出语句没有执行),但是缺也没有报错的原因: 

包是有了,所以不会报错,但是aop的包的版本不匹配,它可能是从仓库拿了个同名但是版本不匹配的包,在Ideal工具中的Maven插件中,把该Module的pom.xml文件移除,然后再添加,它会默认从定义好的Parent标签中版本中找到合适的包下载

上面的操作就是相当于"更新"


https://img4.mukewang.com/5c7cc36200011d0405870580.jpg

提问者:慕粉4019140 2019-03-04 14:20

个回答

  • qq_还没想好_4
    2019-03-07 15:00:01

    有可能出现的问题:

    1:execution表达式写错了。

    2:配置文件或配置类中忘记添加<aop:aspectj-autoproxy/>。

    3:如果切入点没有实现接口需要使用cglib动态代理,<aop:aspectj-autoproxy proxy-target-class="true"/>。

    4:<context:component-scan 配置的问题导致无法动态代理,具体请参考官方文档。

    一般情况下主配置文件要排除@Controller注解,webmvc配置里应该只包含@Controller注解。

    如果我们要切入Controller,我们需要在webmvc配置里面加入<aop:aspectj-autoproxy proxy-target-class="true"/>。

    如果我们要切入其他如Service,我们需要在主配置里面加入<aop:aspectj-autoproxy proxy-target-class="true"/>。

    如果我们既要切入Controller又要切入Service,两个配置都需要加入<aop:aspectj-autoproxy proxy-target-class="true"/>。这个问题比较奇怪,目前还不知道解决方法。