关于Spring Aop定义切面无效所遇到过得坑

简单记录一下Spring Aop没有效果

aop有两种方式实现,一是基于xml的,而是基于注解的

记录一下基于xml配置无效的坑,开启AOP需要导入两个包。
关于Spring Aop定义切面无效所遇到过得坑_第1张图片

我的项目是ssh(Spring MVC + spring + hibernate),自己没事,瞎搞的。
之前在写案例的时候,我是通过xml形式去实现的AOP,由于把切面和切入点的配置写到的spring的配置文件里,如下,applicationContext.xml文件。关于Spring Aop定义切面无效所遇到过得坑_第2张图片
程序启动执行没错误,但是aop效果没体现出来,后来通过伟大的度娘找到了问题。
我们需要把aop的切面定义放在spring MVC的配置文件里,如下,applicationContext-mvc.xml配置文件。
关于Spring Aop定义切面无效所遇到过得坑_第3张图片
切面配置修改后,重新启动运行,aop切面的效果就有了。。

因为spring mvc和spring存在父子容器关系,servlet初始化用于DispatcherServlet,而ContextLoaderListener初始化webapplicationcontext。webapplicationcontext是DispatcherServlet的父容器。子容器可以获取父容器的bean,反过来不行。所以这个问题就很好理解了。在aop的bean中,无法获取切入点的bean所以无效。正确的解决方法就是把这个配置放到applicationContext-mvc.xml中。

你可能感兴趣的:(关于Spring Aop定义切面无效所遇到过得坑)