Spring AOP拦截对Controller的请求时的配置失败
2016-03-05 14:42
393 查看
之前学了Spring AOP的内容,在普通的应用上使用是没有问题的,后来由于做web程序,所以想用来拦截http的请求,以便记录日志,但是在配置过程当中,出现了错误,具体内容如下:
之前我们讲到,要配置一个切面类,要把它放入IoC容器中,并且还要使用如下代码配置:
相关文章:
问题和我一样,但是正确决问题:http://stackoverflow.com/questions/21352560/pointcut-not-triggered-in-spring-controller
问题和我一样,但是解决方式不同,试了他的方法,没有解决(怀疑是不是Spring的版本不同):http://stackoverflow.com/questions/26841785/springmvcaspectj-not-called
问题和我一样,并且解决问题,但是没说为什么:http://newliferen.github.io/2015/08/10/Spring-aop%E6%97%A0%E6%B3%95%E6%8B%A6%E6%88%AAcontroller/
看了解决方式才发现问题可能和我一样,并且说明了问什么:https://segmentfault.com/q/1010000003901757
下面我把最后一篇文章的解决方式引用过来,感谢这位朋友:
简单的说,就是父子容器的问题,将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是在子容器中的,父容器是无法访问子容器,所以就拦截不到。
之前我们讲到,要配置一个切面类,要把它放入IoC容器中,并且还要使用如下代码配置:
<aop:aspectj-autoproxy proxy-target-class="true"/>但是用过Java Web开发应用的都知道,使用Spring时的配置文件可能会有两个(我是这么做的),一个就是用在全局范围内的applicationContext.xml(配置文件的名字可以改,我是按照默认的使用方式说明的),一个就是SpringMVC自己的配置文件,我在配置的时候是把配置信息放到了全局的配置文件中,发现切面怎么也不起作用,因为之前的使用方式就是这样的,后来在网上搜索,发现好多种说法,但是大家都默认,当拦截controller的方法时把配置信息放到了springMVC的配置文件中了,但是没说明这是为什么,抱着一种不达目的不罢休的精神又在网上搜索,终于找到答案。下面我就把几篇相关的文章贴出来,如果有和我相同问题的人,希望可以帮助到你。
相关文章:
问题和我一样,但是正确决问题:http://stackoverflow.com/questions/21352560/pointcut-not-triggered-in-spring-controller
问题和我一样,但是解决方式不同,试了他的方法,没有解决(怀疑是不是Spring的版本不同):http://stackoverflow.com/questions/26841785/springmvcaspectj-not-called
问题和我一样,并且解决问题,但是没说为什么:http://newliferen.github.io/2015/08/10/Spring-aop%E6%97%A0%E6%B3%95%E6%8B%A6%E6%88%AAcontroller/
看了解决方式才发现问题可能和我一样,并且说明了问什么:https://segmentfault.com/q/1010000003901757
下面我把最后一篇文章的解决方式引用过来,感谢这位朋友:
简单的说,就是父子容器的问题,将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是在子容器中的,父容器是无法访问子容器,所以就拦截不到。
相关文章推荐
- Java File and FileSystem 源代码分析
- Spring 配置文件详解
- JAVA编程指南 --继承
- eclipse默认编码为GBK,修改为UTF8的方法
- Eclipse 如何设置注释的模板
- 20145325张梓靖 《Java程序设计》第1周学习总结
- java调用天气预报webservice
- 一些小例子程序,用于说明JDBC的使用步骤。
- [疯狂Java笔记]事件处理:事件类型、监听器接口、事件适配器
- Java 多线程(七) 线程间的通信——wait及notify方法
- JSP与JavaBean
- spring+mybatis连接access数据库
- Java入门:Java环境变量PATH、CLASSPATH、JAVA_HOME
- leetcode:238. Product of Array Except Self(Java)解答
- java几种常见的对话框整理汇总
- Java 多线程(六) synchronized关键字详解
- Spring、Hibernate的通用DAO层与Service层的实现
- Java之HashMap类实用方法大全
- Ubuntu jdk报Picked up JAVA_TOOL_OPTIONS信息解决
- JavaSE入门学习25:Java异常处理(上)