Spring AOP拦截对Controller的请求时的配置失败

之前学了Spring AOP的内容,在普通的应用上使用是没有问题的,后来由于做web程序,所以想用来拦截http的请求,以便记录日志,但是在配置过程当中,出现了错误,具体内容如下:

之前我们讲到,要配置一个切面类,要把它放入IoC容器中,并且还要使用如下代码配置:

<aop:aspectj-autoproxy proxy-target-class="true"/>
但是用过Java Web开发应用的都知道,使用Spring时的配置文件可能会有两个(我是这么做的),一个就是用在全局范围内的applicationContext.xml(配置文件的名字可以改,我是按照默认的使用方式说明的),一个就是SpringMVC自己的配置文件,我在配置的时候是把配置信息放到了全局的配置文件中,发现切面怎么也不起作用,因为之前的使用方式就是这样的,后来在网上搜索,发现好多种说法,但是大家都默认, 当拦截controller的方法时把配置信息放到了springMVC的配置文件中了,但是没说明这是为什么,抱着一种不达目的不罢休的精神又在网上搜索,终于找到答案。下面我就把几篇相关的文章贴出来,如果有和我相同问题的人,希望可以帮助到你。

相关文章:

下面我把最后一篇文章的解决方式引用过来,感谢这位朋友:

简单的说,就是父子容器的问题,将AOP的配置信息放在applicationContext.xml中,该配置文件被ContextLoaderListener加载,Spring会创建一个WebApplicationContext的上下文,称为父上下文(父容器),保存在 ServletContext中,key值为WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE。而spring-mvc.xml是DispatcherServlet 的配置文件,这样的servlet可以同时配置多个,每个 DispatcherServlet有一个自己的上下文对象(WebApplicationContext),称为子上下文(子容器),子上下文可以访问父上下文中的内容,但父上下文不能访问子上下文中的内容。 它也保存在 ServletContext中, key值是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。当spring加载父容器的时候就会去找切入点,但是这个时候切入的controller是在子容器中的,父容器是无法访问子容器,所以就拦截不到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值