Spring的contextLoader详解
2016-10-23 14:18
183 查看
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;
}
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;
}
相关文章推荐
- web.xml配置详解 org.springframework.web.context.ContextLoaderListener
- 【Spring】详解ContextLoaderListener和DispatcherServlet的区别
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
- 详解Spring的applicationContext.xml配置文件
- Spring之ContextLoaderListener的作用
- org.springframework.web.struts.ContextLoaderPlugIn 和 org.springframework.web.con
- ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed
- 转:Spring中的ContextLoaderListener
- 关于java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
- Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
- Spring异常:Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
- 严重: action: null java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
- spring ContextLoaderListener.java
- Spring中的ContextLoaderListener
- Spring中的ContextLoaderListener作用
- Spring 配置问题还是代码问题?Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
- WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).