ContextLoaderListener的作用

时间:2015-06-16 03:53:59

标签: spring

除了为Web应用程序加载可选的根applicationContext之外,ContextLoaderListener的作用是什么?

在Spring docs API中说 Bootstrap监听器启动并关闭Spring的根WebApplicationContext。 在其他一些讨论中,我发现ServletContextListener创建了WebApplicationContextWebApplicationContext可以通过ServletContext bean和ServletContextAware方法访问getServletContext。否则需要手动创建。

ContextLoaderListener不是强制性的。因此,如果不使用ContextLoaderListener,我们是否需要手动创建WebApplicationContext

1 个答案:

答案 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组件定义为:

  • 控制器
  • ViewResolvers
  • LocaleResolvers
  • ThemeResolvers

如果您想要访问中间层组件(来自多Web组件),例如

  • DAO
  • 实体
  • 服务

你需要一个父语境。因此,您可以在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管理。