Web.xml 中加载spring 中的内容
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext-resources.xml
</param-value>
</context-param>
通过 org.springframework.web.context.ContextLoader 来加载
/**
* Initialize Spring's web application context for the given servlet context,
* according to the "{@link #CONTEXT_CLASS_PARAM contextClass}" and
* "{@link #CONFIG_LOCATION_PARAM contextConfigLocation}" context-params.
* @param servletContext current servlet context
* @return the new WebApplicationContext
* @throws IllegalStateException if there is already a root application context present
* @throws BeansException if the context failed to initialize
* @see #CONTEXT_CLASS_PARAM
* @see #CONFIG_LOCATION_PARAM
*/
public WebApplicationContext initWebApplicationContext(ServletContext servletContext)
throws IllegalStateException, BeansException {
if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
throw new IllegalStateException(
"Cannot initialize context because there is already a root application context present - " +
"check whether you have multiple ContextLoader* definitions in your web.xml!");
}
servletContext.log("Initializing Spring root WebApplicationContext");
if (logger.isInfoEnabled()) {
logger.info("Root WebApplicationContext: initialization started");
}
long startTime = System.currentTimeMillis();
try {
// Determine parent for root web application context, if any.
ApplicationContext parent = loadParentContext(servletContext);
// Store context in local instance variable, to guarantee that
// it is available on ServletContext shutdown.
this.context = createWebApplicationContext(servletContext, parent);
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
currentContextPerThread.put(Thread.currentThread().getContextClassLoader(), this.context);
if (logger.isDebugEnabled()) {
logger.debug("Published root WebApplicationContext as ServletContext attribute with name [" +
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE + "]");
}
if (logger.isInfoEnabled()) {
long elapsedTime = System.currentTimeMillis() - startTime;
logger.info("Root WebApplicationContext: initialization completed in " + elapsedTime + " ms");
}
return this.context;
}
catch (RuntimeException ex) {
logger.error("Context initialization failed", ex);
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, ex);
throw ex;
}
catch (Error err) {
logger.error("Context initialization failed", err);
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, err);
throw err;
}
}
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);
wac.setConfigLocation(servletContext.getInitParameter(CONFIG_LOCATION_PARAM));
customizeContext(servletContext, wac);
wac.refresh();
return wac;
}
分享到:
相关推荐
ContextLoaderListener依赖于ContextLoader类,该类负责实际的配置加载工作。 2. **ApplicationContext** ContextLoaderListener加载的ApplicationContext是由`XmlWebApplicationContext`类创建的,它是Spring框架...
首先,ContextLoaderListener 会关联 ContextLoader这个类,整个加载配置过程由 ContextLoader 来完成。ContextLoader 可以由 ContextLoaderListener 和 ContextLoaderServlet 生成。ContextLoaderServlet 实现了 ...
这个插件将加载 Spring 的配置文件,并初始化 WebApplicationContext。在 Struts 的 action 中,我们可以使用 Spring 的依赖注入机制来获取 Bean: ```java public class MyAction extends ActionSupport { @...
在Web应用中,Spring提供了`org.springframework.web.context.ContextLoader`类来加载`WebApplicationContext`。有两种主要的加载方式: - **ContextLoaderListener**:这是一个Servlet监听器,它会在Web应用启动...
这段配置告诉Web服务器在启动时加载指定的Spring配置文件(如`applicationContext.xml`)。`ContextLoaderListener`实现了`ServletContextListener`接口,因此当Web应用启动时,它会接收到`contextInitialized`方法...
throw new IllegalStateException("Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!...
"check whether you have multiple ContextLoader* definitions in your web.xml!"); } servletContext.log("Initializing Spring root WebApplicationContext"); if (logger.isInfoEnabled()) { logger.info(...
`ContextLoader`的核心方法是`initWebApplicationContext`,它负责根据`contextConfigLocation`参数指定的XML配置文件路径,初始化`WebApplicationContext`。这些配置文件通常包含了Spring的bean定义,如服务、数据...
例如,通过`FileSystemXmlApplicationContext`加载XML配置文件创建Bean容器: ```java ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); Object userService = ac....
默认情况下,Spring会选择`XmlWebApplicationContext`作为Web应用的上下文类型,因为它可以从XML配置文件中加载bean定义。 接下来是配置和启动上下文的过程。这包括设置上下文ID,关联Servlet上下文,指定配置文件...
- **配置`web.xml`**:在Web应用的部署描述符文件中注册Spring的上下文加载监听器,以确保在启动应用时加载Spring的配置信息。例如: ```xml <servlet-name>contextLoader <servlet-class>org.springframework...
3. **创建并配置Bean定义读取器**:通过`XmlBeanDefinitionReader`类来加载XML格式的bean定义信息,并将其配置给前面创建的`BeanFactory`。 ```java XmlBeanDefinitionReader reader = new ...
这是一种Servlet,它同样可以在`web.xml`中配置,通常用于处理特定的URL模式,并在启动时加载上下文: ```xml <servlet-name>contextLoader <servlet-class>org.springframework.web.context....
从加载过程我们可以看到,首先从Servlet事件中得到ServletContext,然后可以读到配置好的在web.xml的中的各个属性值,然后ContextLoder实例化WebApplicationContext并完成其载入和初始化作为根上下文。当这个根上...
ERROR main org.springframework.web.context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ...
6. **测试类加载配置文件**:在单元测试中,可以通过 Spring 提供的 `ContextLoader` 或者 `ApplicationContext` 来加载配置文件并初始化上下文。 7. **根据 name 注入 service**:使用 `@Resource` 注解指定 name ...
当出现"log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader)"这样的警告时,这意味着log4j没有找到任何日志输出目标。这通常是因为日志配置文件未被正确加载。解决...
日志中还包含了关于log4j的警告信息,指出无法为`org.springframework.web.context.ContextLoader`找到appender,提示需要正确初始化log4j系统。解决这个问题通常涉及: - **配置log4j属性文件**:在项目中引入log4j...
1. **初始化流程**:从`org.springframework.context.support.ClassPathXmlApplicationContext`或`org.springframework.web.context.ContextLoader`开始,理解如何加载配置并创建Bean定义。 2. **依赖注入**:研究`...