`
yjgyjg4
  • 浏览: 118148 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ContextLoader 加载xml

阅读更多
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;
	}
分享到:
评论

相关推荐

    web.xml配置解析.pdf

    ContextLoaderListener依赖于ContextLoader类,该类负责实际的配置加载工作。 2. **ApplicationContext** ContextLoaderListener加载的ApplicationContext是由`XmlWebApplicationContext`类创建的,它是Spring框架...

    Spring的监听器ContextLoaderListener的作用

    首先,ContextLoaderListener 会关联 ContextLoader这个类,整个加载配置过程由 ContextLoader 来完成。ContextLoader 可以由 ContextLoaderListener 和 ContextLoaderServlet 生成。ContextLoaderServlet 实现了 ...

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

    这个插件将加载 Spring 的配置文件,并初始化 WebApplicationContext。在 Struts 的 action 中,我们可以使用 Spring 的依赖注入机制来获取 Bean: ```java public class MyAction extends ActionSupport { @...

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

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

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

    这段配置告诉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!...

    ssh框架搭建

    "check whether you have multiple ContextLoader* definitions in your web.xml!"); } servletContext.log("Initializing Spring root WebApplicationContext"); if (logger.isInfoEnabled()) { logger.info(...

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

    `ContextLoader`的核心方法是`initWebApplicationContext`,它负责根据`contextConfigLocation`参数指定的XML配置文件路径,初始化`WebApplicationContext`。这些配置文件通常包含了Spring的bean定义,如服务、数据...

    Java获取Bean的几种方式.pdf

    例如,通过`FileSystemXmlApplicationContext`加载XML配置文件创建Bean容器: ```java ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); Object userService = ac....

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

    默认情况下,Spring会选择`XmlWebApplicationContext`作为Web应用的上下文类型,因为它可以从XML配置文件中加载bean定义。 接下来是配置和启动上下文的过程。这包括设置上下文ID,关联Servlet上下文,指定配置文件...

    j2ee SSH 整合笔记,献于新手。。

    - **配置`web.xml`**:在Web应用的部署描述符文件中注册Spring的上下文加载监听器,以确保在启动应用时加载Spring的配置信息。例如: ```xml &lt;servlet-name&gt;contextLoader &lt;servlet-class&gt;org.springframework...

    spring ioc以及事物架构图

    3. **创建并配置Bean定义读取器**:通过`XmlBeanDefinitionReader`类来加载XML格式的bean定义信息,并将其配置给前面创建的`BeanFactory`。 ```java XmlBeanDefinitionReader reader = new ...

    spring中的所有配置

    这是一种Servlet,它同样可以在`web.xml`中配置,通常用于处理特定的URL模式,并在启动时加载上下文: ```xml &lt;servlet-name&gt;contextLoader &lt;servlet-class&gt;org.springframework.web.context....

    spring源代码解析

    从加载过程我们可以看到,首先从Servlet事件中得到ServletContext,然后可以读到配置好的在web.xml的中的各个属性值,然后ContextLoder实例化WebApplicationContext并完成其载入和初始化作为根上下文。当这个根上...

    S2SH整合报错

    ERROR main org.springframework.web.context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ...

    spring事务管理

    6. **测试类加载配置文件**:在单元测试中,可以通过 Spring 提供的 `ContextLoader` 或者 `ApplicationContext` 来加载配置文件并初始化上下文。 7. **根据 name 注入 service**:使用 `@Resource` 注解指定 name ...

    Java记录文档

    当出现"log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader)"这样的警告时,这意味着log4j没有找到任何日志输出目标。这通常是因为日志配置文件未被正确加载。解决...

    errors code

    日志中还包含了关于log4j的警告信息,指出无法为`org.springframework.web.context.ContextLoader`找到appender,提示需要正确初始化log4j系统。解决这个问题通常涉及: - **配置log4j属性文件**:在项目中引入log4j...

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

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

Global site tag (gtag.js) - Google Analytics