Spring中ContextLoaderListener的角色/目的是什么?

17 浏览
0 Comments

Spring中ContextLoaderListener的角色/目的是什么?

我在学习Spring框架,这个框架也被用在我正在开发的项目中。我发现web.xml文件中有一个ContextLoaderListener条目,但我无法确定它如何帮助开发者。

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

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

但我不明白ContextLoaderListener内部初始化WebApplicationContext有什么意义?

根据我的理解,ContextLoaderListener会读取Spring配置文件(在web.xml中的contextConfigLocation中指定),对它进行解析并加载在该配置文件中定义的singleton bean。同样地,当我们想要加载prototype bean时,我们也会使用同一个webapplication context来加载它。因此,我们使用ContextLoaderListener来初始化webapplication,以便我们预先读取/解析/验证配置文件,无论何时我们想要注入依赖项,我们都可以立即进行而无需任何延迟。我的理解正确吗?

admin 更改状态以发布 2023年5月25日
0
0 Comments

ContextLoaderListener是可选的。这里只是为了说明一点:您可以在不配置ContextLoaderListener的情况下启动Spring应用程序,只需使用基本的最小web.xmlDispatcherServlet即可。

这是一个样例:

web.xml



  Some Minimal Webapp
     
    index.jsp    
  
  
    dispatcher
    
      org.springframework.web.servlet.DispatcherServlet
    
    1
  
  
    dispatcher
    *.do
  

创建一个名为dispatcher-servlet.xml的文件,并将其存储在WEB-INF下。由于我们在欢迎列表中提到了index.jsp,因此将此文件添加到WEB-INF下。

dispatcher-servlet.xml

dispatcher-servlet.xml中定义您的bean:



    
      ...
    
    
      ...
             
    
    
    
    
    
    
      
      
      
    

0
0 Comments

你的理解是正确的。 ApplicationContext 是你的Spring Bean所在的地方。 ContextLoaderListener 的目的有两个:

  1. ApplicationContext 的生命周期与 ServletContext 的生命周期绑定在一起

  2. 自动创建 ApplicationContext,让你不必编写显式代码来创建它 - 这是一个方便的函数。

ContextLoaderListener 的另一个方便之处在于它创建了一个 WebApplicationContext,并通过 ServletContextAware Bean 和 getServletContext 方法提供对 ServletContext 的访问。

0