ContextLoaderListener在春季的角色/目的?

2022-08-31 06:45:20

我正在学习Spring框架,它正在我的项目中使用。我在我的web.xml文件中找到ContextLoaderListener条目。但是无法弄清楚它究竟如何帮助开发人员?

ContextLoaderListener的官方文档中,它说它是启动WebApplicationContext。关于WebApplicationContext JavaDocs说:

为 Web 应用程序提供配置的接口。


但是我无法理解我在内部初始化WebApplicationContextContext中实现了什么?

根据我的理解ContextLoaderListener读取Spring配置文件(在web.xml中针对 contextConfigLocation给出值),解析它并加载该配置文件中定义的单例bean。同样,当我们想要加载原型bean时,我们将使用相同的Web应用程序上下文来加载它。因此,我们使用 ContextLoaderListener 初始化 web 应用程序,以便我们提前读取/解析/验证配置文件,每当我们想要注入依赖项时,我们都可以立即完成,没有任何延迟。这种理解是否正确?


答案 1

你的理解是正确的。这是你的春豆居住的地方。的用途是双重的:ApplicationContextContextLoaderListener

  1. 将 的生命周期与 和 的生命周期联系起来ApplicationContextServletContext

  2. 自动创建 ,因此您不必编写显式代码即可创建它 - 这是一个方便的功能。ApplicationContext

关于 的另一个方便的事情是,它创建了一个,并提供对 via ServletContextAware bean 和方法的访问。ContextLoaderListenerWebApplicationContextServletContextgetServletContext


答案 2

ContextLoaderListener可选的。只是为了在这里提出一个观点:您可以在不进行任何配置的情况下启动Spring应用程序,只需使用.ContextLoaderListenerweb.xmlDispatcherServlet

下面是它的外观:

网.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" 
    version="2.5">
  <display-name>Some Minimal Webapp</display-name>
  <welcome-file-list>   
    <welcome-file>index.jsp</welcome-file>    
  </welcome-file-list>

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

创建一个名为 的文件并将其存储在 下。由于我们在欢迎列表中提到过,请将此文件添加到 下。dispatcher-servlet.xmlWEB-INFindex.jspWEB-INF

调度程序-servlet.xml

在定义您的豆子中:dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd     
        http://www.springframework.org/schema/context     
        http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="bean1">
      ...
    </bean>
    <bean id="bean2">
      ...
    </bean>         

    <context:component-scan base-package="com.example" />
    <!-- Import your other configuration files too -->
    <import resource="other-configs.xml"/>
    <import resource="some-other-config.xml"/>

    <!-- View Resolver -->
    <bean 
        id="viewResolver" 
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
      <property 
          name="viewClass" 
          value="org.springframework.web.servlet.view.JstlView" />
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
    </bean>
</beans>

推荐