Spring的contextLoader详解

来源:互联网 发布:非线性优化计算方法pdf 编辑:程序博客网 时间:2024/06/06 08:57

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;

       }

0 0
原创粉丝点击