-
[散修弟子]JAVA-38080编辑于2018-06-27
-
[武汉|结业弟子]JAVA-李伟明0
嗯,是这样解决的。
主要原因与服务器启动时Webapp的web.xml中配置的加载顺序有关:
启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。
紧接着,容器创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。
容器将<context-param>转换为键值对,并交给servletContext。
容器创建<listener>中的类实例,创建监听器。
加载顺序是:ServletContext -> context-param -> listener -> filter -> servlet
1. Spring是listener ,因此其配置文件会先于Spring mvc的servlet加载。
2. 执行Spring配置文件后,Spring会创建一个WebApplicationContext上下文,称为父上下文(父容器);spring mvc可以同时配置多个,每个 DispatcherServlet有一个自己的上下文对象(WebApplicationContext),称为子上下文(子容器)。
3. 子上下文可以访问父上下文中的内容,但父上下文不能访问子上下文中的内容。
4. 因此父容器中的<aop:aspectj-autoproxy/> 不能作用到子容器扫描的Controller。
编辑于2018-06-28
- 去第 页