除了为Web应用程序加载可选的根applicationContext之外,ContextLoaderListener
的作用是什么?
在Spring docs API中说
Bootstrap监听器启动并关闭Spring的根WebApplicationContext
。
在其他一些讨论中,我发现ServletContextListener
创建了WebApplicationContext
,WebApplicationContext
可以通过ServletContext
bean和ServletContextAware
方法访问getServletContext
。否则需要手动创建。
但ContextLoaderListener
不是强制性的。因此,如果不使用ContextLoaderListener
,我们是否需要手动创建WebApplicationContext
?
答案 0 :(得分:1)
WebApplicationContext绑定在ServletContext中,并在您的web.xml中定义,如:
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/my-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
如果您没有使用像previous(my-context.xml)这样的自定义配置文件进行配置,并且在web.xml中省略了该条目,则Spring DispatcherServlet将使用
&lt; servlet_name&gt;搜索并加载其配置文件。 -servlet.xml后缀。
在上面的my-context.xml中(或在&lt; servlet_name&gt; -servlet.xml中),可以将Web组件定义为:
如果您想要访问中间层组件(来自多Web组件),例如
你需要一个父语境。因此,您可以在web.xml中定义:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/application-context-service.xml
/WEB-INF/config/application-context-dao.xml
</param-value>
</context-param>
ContextLoaderListener为Web应用程序创建根Web应用程序上下文,并将其放在根Application的ServletContext中。 DispatcherServlet创建自己的WebApplicationContext,处理程序,控制器,视图解析器等由此WebApplicationContext管理。