`

看看Spring的contextLoader都做了什么

阅读更多

public class ContextLoader {

 

      

       public static final String CONTEXT_CLASS_PARAM = "contextClass";

 

//此处定义了spring配置文件的参数名称,web.xml中的

<context-param>

     <param-name>contextConfigLocation</param-name>

     <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/dataAccessContext-IBatis.xml</param-value>

</context-param>

完全对应,这个名字是不可更改的

       public static final String CONFIG_LOCATION_PARAM = "contextConfigLocation";

 

      

       public static final String LOCATOR_FACTORY_SELECTOR_PARAM = "locatorFactorySelector";

 

      

       public static final String LOCATOR_FACTORY_KEY_PARAM = "parentContextKey";

 

      

       private static final String DEFAULT_STRATEGIES_PATH = "ContextLoader.properties";

 

 

       private static final Properties defaultStrategies;

 

       static {

              // Load default strategy implementations from properties file.

              // This is currently strictly internal and not meant to be customized

              // by application developers.

              try {

                     ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, ContextLoader.class);

                     defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);

              }

              catch (IOException ex) {

                     throw new IllegalStateException("Could not load 'ContextLoader.properties': " + ex.getMessage());

              }

       }

 

 

       private final Log logger = LogFactory.getLog(ContextLoader.class);

 

       /**

       * The root WebApplicationContext instance that this loader manages.

       */

       private WebApplicationContext context;

 

       /**

       * Holds BeanFactoryReference when loading parent factory via

       * ContextSingletonBeanFactoryLocator.

       */

       private BeanFactoryReference parentContextRef;

 

 

      

       .......

      

       protected WebApplicationContext createWebApplicationContext(

                     ServletContext servletContext, ApplicationContext parent) throws BeansException {

 

              Class contextClass = determineContextClass(servletContext);

              if (!ConfigurableWebApplicationContext.class.isAssignableFrom(contextClass)) {

                     throw new ApplicationContextException("Custom context class [" + contextClass.getName() +

                                   "] is not of type [" + ConfigurableWebApplicationContext.class.getName() + "]");

              }

 

              ConfigurableWebApplicationContext wac =

                            (ConfigurableWebApplicationContext) BeanUtils.instantiateClass(contextClass);

              wac.setParent(parent);

              wac.setServletContext(servletContext);

//这里getInitParameter()方法概述:public java.lang.String getInitParameter(java.lang.String name)返回上下文定义的变量的值,如果变量不存在,返回null。见ServletConfig.getInitParameter (java.lang.String)

              String configLocation = servletContext.getInitParameter(CONFIG_LOCATION_PARAM);

//最后使用configLocation初始化wac对象

              if (configLocation != null) {

                     wac.setConfigLocations(StringUtils.tokenizeToStringArray(configLocation,

                                   ConfigurableWebApplicationContext.CONFIG_LOCATION_DELIMITERS));

              }

 

              wac.refresh();

              return wac;

       }

 

      

      .......

 

 

 

      

 

 

 

}

分享到:
评论

相关推荐

    spring-web-2.5.jar

    org.springframework.web.context.ContextLoader.class org.springframework.web.context.ContextLoaderListener.class org.springframework.web.context.ContextLoaderServlet.class org.springframework.web....

    Spring在容器在启动的时候发生了什么

    这个过程可以通过时序图来形象地表示,从`ContextLoaderListener`开始,调用`ContextLoader`,然后初始化`WebApplicationContext`,完成整个Spring容器的初始化。 总结来说,Spring在容器启动时,通过`...

    ContextLoader 加载xml

    在Spring框架中,`ContextLoader`是一个至关重要的组件,它负责初始化和加载应用程序上下文(ApplicationContext)。这个过程是Spring框架启动时的核心步骤,为整个应用提供了IoC(Inversion of Control)容器,使得...

    官方原版源码spring-framework-5.0.13.RELEASE.zip

    1. **初始化流程**:从`org.springframework.context.support.ClassPathXmlApplicationContext`或`org.springframework.web.context.ContextLoader`开始,理解如何加载配置并创建Bean定义。 2. **依赖注入**:研究`...

    spring源代码解析

    对于一个Spring激活的web应用程序,可以通过使用Spring代码声明式的指定在web应用程序启动时载入应用程序上下文(WebApplicationContext),Spring的ContextLoader是提供这样性能的类,我们可以使用 ...

    Spring源码学习七:web应用自动装配Spring配置文件1

    `ContextLoaderListener`的`contextInitialized`方法主要负责调用`initWebApplicationContext`方法,该方法在`ContextLoader`类中实现,其作用是初始化Web环境下的Spring应用上下文(ApplicationContext)。...

    Spring笔记.doc

    如果需要引入多个配置文件,可以使用 `ContextLoader` 或 `AnnotationConfigApplicationContext`,并传入配置文件路径或配置类数组。 Spring 框架的强大之处在于它的灵活性和全面性。通过 IoC 和 AOP,Spring 降低...

    spring ioc以及事物架构图

    - **ContextLoader**:提供了一种机制来加载ApplicationContext到Web应用程序上下文中。 - **AbstractApplicationContext**:所有具体ApplicationContext实现的基础类,提供了通用的功能。 - **...

    最新版spring-framework-4.3.12.RELEASE-schema.zip约束

    Spring Framework 是一个全面的Java应用开发框架,以其模块化、可扩展性和强大的功能...Spring 4.3.12.RELEASE的每一个子模块都是经过精心设计和优化的,旨在提高开发效率,减少出错概率,同时保持代码的清晰和简洁。

    Spring在web下启动流程学习笔记

    这个监听器是Spring Web应用程序的核心组件,它继承自`ContextLoader`,并在Web容器启动时执行`contextInitialized`方法。在这个方法中,`ContextLoader`会调用`initWebApplicationContext`,这是启动Web上下文的...

    spring-framework-3.2.5.RELEASE 源代码

    Spring为测试提供了便利,`org.springframework.test`包下的`ContextLoader`、`TestContext`等类可以帮助开发者进行单元测试和集成测试,提高测试覆盖率。 8. **Spring Expression Language (SpEL)** SpEL是...

    Spring的监听器ContextLoaderListener的作用

    这样,Spring 中的所有 bean 都由这个类来创建。 其次,ContextLoaderListener 负责部署 applicationContext 的 xml 文件。在 web.xml 文件中,如果不写任何参数配置信息,默认的路径是"/WEB-INF/...

    spring中的所有配置

    Spring框架的强大之处在于其高度的灵活性和可扩展性,无论是通过监听器还是Servlet,亦或是其他各种机制,都能有效地管理和控制Web应用程序的生命周期。通过对Spring配置的深入了解,开发人员能够更好地利用框架提供...

    spring在web.xml中和在struts中的不同配置..pdf

    在Spring中,Bean的实例化、管理和依赖注入都在这个容器中完成。 在`web.xml`中配置Spring,主要涉及两步。第一步是定义`context-param`,指定Spring的配置文件路径,例如: ```xml &lt;param-name&gt;...

    精品专题(2021-2022年收藏)spring项目中监听器作用.doc

    在Spring项目中,监听器(Listener)扮演着关键的角色,特别是在Web应用程序的上下文管理方面。本文将深入探讨Spring框架中的监听器,特别是`ContextLoaderListener`的作用及其配置。 `ContextLoaderListener`是...

    第17讲 Spring、hibernate和Struts2的整合

    ①在web.xml中配置ApplicationContext.xml,并使用ContextLoader监听器实例化spring容器 ②把action交给spring管理,即在spring配置文件中定义action Bean并使用依赖注入功能在action中注入业务Bean,同时修改作用域...

    使用监听器对Spring bean id进行唯一校验过程解析

    首先,我们需要自定义一个ContextLoader,继承自Spring的ContextLoader类。在这个类中,我们需要Override customizeContext方法,在这个方法中,我们可以设置allowBeanDefinitionOverriding属性为false,从而实现...

    在Eclipse 中创建Spring的 Web应用.doc

    在Web应用中,Spring提供了`org.springframework.web.context.ContextLoader`类来加载`WebApplicationContext`。有两种主要的加载方式: - **ContextLoaderListener**:这是一个Servlet监听器,它会在Web应用启动...

    SPRING API 2.0.CHM

    ContextLoader ContextLoaderListener ContextLoaderPlugIn ContextLoaderServlet ContextRefreshedEvent ContextSingletonBeanFactoryLocator ControlFlow ControlFlowFactory ControlFlowFactory.Jdk13...

Global site tag (gtag.js) - Google Analytics