- 浏览: 89022 次
- 性别:
- 来自: 厦门
最新评论
-
zhengyong7232:
SELECT t.province,DECODE(landsc ...
列转行 -
meepo3927:
不是特么很懂
列转行
当我们要自动装配ApplicationContext配置信息时候,首先在web.xml配置ContextLoaderListener,下面是部分源代码:
private ContextLoader contextLoader;
/**
* Initialize the root web application context.
*/
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
this.contextLoader.initWebApplicationContext(event.getServletContext());//注意此处
}
protected ContextLoader createContextLoader() {
return new ContextLoader();
}
public ContextLoader getContextLoader() {
return this.contextLoader;
}
public void contextDestroyed(ServletContextEvent event) {
if (this.contextLoader != null) {
this.contextLoader.closeWebApplicationContext(event.getServletContext());
}
}
}
我们主要了解下WebApplicationContext是怎么初始化出来的,首先contextInitialized(ServletContextEvent event)方法的this.contextLoader.initWebApplicationContext(event.getServletContext());进去之后我们看到
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; } }
注意注意此处部分,说明当我们要得到一个WebApplicationContext只需要在ServletContext中获取属性名为WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的常量值就可以得到一个ApplicationContext,最终可以获取spring配置文件中任意一个Bean对象
eg:
public String execute() throws Exception { // TODO Auto-generated method stub ApplicationContext conn=(ApplicationContext)ServletActionContext.getServletContext().getAttribute(WebApplicationContext.class.getName() + ".ROOT"); System.out.println(conn.getBean("biz")); return SUCCESS; }
或者直接使用org.springframework.web.context.support.WebApplicationContextUtils这个抽象的工具类来获得WebApplicationContext,该类的方法
public static WebApplicationContext getWebApplicationContext(ServletContext sc) {
return getWebApplicationContext(sc, WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
}
还有更多方法就不多介绍了,自行查看这个类的源码。
发表评论
-
最小生成树之Kruskal算法
2013-12-15 00:54 1086这篇文章实现最小生成树的Kruskal算法Kruskal算 ... -
排序算法--插入排序
2013-12-15 00:47 1065插入排序原理:假设 ... -
poi创建下拉框
2013-04-16 19:01 0package finance.tools.salesper ... -
Spring中Transactional配置
2013-04-11 20:43 1001Spring中Transactional配置 标签: 杂谈 分 ... -
Hibernate将Enum枚举类型映射为Int类型 .
2013-04-09 16:46 1538最近要用Hibernate做一个枚举类型的映射,在MySQL ... -
Hibernate 更灵活的用法 HibernateCallback
2013-01-22 14:41 1433在项目中用Hibernate的DetachedCriter ... -
spring源代码分析(2)--BeanFactory
2013-01-20 12:38 1430我们首先来看下BeanFacroty接口 pa ... -
spring源代码分析(1)--Resource的分析
2013-01-20 12:22 4044我们知道,在spring中,配置文件是通过资源形式加载的, ... -
DefaultListableBeanFactory研究
2013-01-18 10:49 5907DefaultSingletonBeanRegistry完 ... -
jvm的内存调优
2013-01-11 15:54 8631) 堆 运行时数 ... -
struts2中Action的name 和package的name和namespace是什么作用
2013-01-02 12:16 9635在struts2的 struts.xml 配置中 例: ... -
深入探索 高效的Java异常处理框架
2012-10-22 14:09 913摘要:本文从Java异常最基本的概念、语法开始讲述了Java异 ... -
JAVA对ArrayList排序
2012-10-16 21:53 16519java如何对ArrayList中对象按照该对象某属性排序 ... -
ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
2012-09-11 00:48 956工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
2012-09-11 00:45 1652工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
Spring IOC之BeanFactory
2012-09-10 12:39 1311BeanFactory ,作为 Spring 基础的 IoC ... -
Java5 并发学习
2012-09-10 11:33 820在Java5之后 ... -
Spring对事务管理的支持的发展历程(基础篇
2012-08-31 17:43 939Connection conn = DataS ... -
CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar .
2012-08-31 16:54 1656import javax.xml.datatype.Datat ... -
《Spring技术内幕》学习笔记10——Web环境中Spring的启动过程
2012-07-30 09:04 10031.Spring 不但可以在 JavaSE 环境中应用,在 W ...
相关推荐
总之,`Spring-5.1.5源码`的分析涵盖了Spring框架在Web应用中的核心功能,包括初始化、配置加载、依赖注入、AOP、异常处理以及现代化Web技术的支持。深入理解这些知识点,对于提升Spring框架的使用技巧和开发效率...
6. **源码分析** - 源码中可能包含`struts.xml`、`applicationContext.xml`、`hibernate.cfg.xml`等配置文件。 - LoginAction类实现登录功能,可能包含validate()方法进行验证,execute()方法处理登录逻辑。 - ...
下面我们使用ContextLoaderListener作为载入器作一个详细的分析,这个Servlet的监听器是根上下文被载入的地方,也是整个 Spring web应用加载上下文的第一个地方;从加载过程我们可以看到,首先从Servlet事件中得到...
5. **项目源码分析**:在压缩包中的项目源码,我们可以看到以下几个关键部分: - `web.xml`:配置Spring MVC的DispatcherServlet和ContextLoaderListener。 - `applicationContext.xml`:定义Spring容器的Bean,...
本资源提供的"SpringMvc+Spring+MyBatis+Maven整合视频源码+数据库"是针对这四个框架的集成实践,通过源码分析,有助于开发者深入理解它们的协同工作方式。 Spring MVC 是Spring框架的一部分,它作为控制器,负责...
- **源码分析**: 了解Spring的工作原理,可以通过阅读源码加深理解,学习设计模式和最佳实践。 - **开发工具**: 使用IDE如IntelliJ IDEA或Eclipse,它们通常有集成的Spring支持,如自动配置、代码提示和调试功能。 ...
### SpringMVC请求流程源码分析 #### 一、SpringMVC使用与配置 ##### 1. 工程创建 为了构建一个支持SpringMVC框架的项目,首先需要创建一个Maven工程。在这个过程中,我们需要完成以下几个步骤: - **创建项目...
通过本文对Spring框架源码的分析,我们可以清楚地看到Spring框架是如何在Servlet容器启动时初始化其核心上下文的。`ContextLoaderListener`作为一个重要的组件,在整个启动过程中扮演着关键角色。理解这些核心概念...
通过阅读和分析Spring MVC的源码,我们可以了解到框架内部的工作机制,包括请求的处理流程、模型数据的绑定、视图的解析以及控制器的执行等。源码研究可以帮助开发者更好地理解如何定制和扩展Spring MVC,以满足特定...
3. **Spring与Jersey集成:** 将Jersey集成到Spring环境中,可以通过Spring的ContextLoaderListener初始化Jersey的Servlet,或者使用`@Provider`注解的bean进行注册。这允许我们在Spring容器中管理Jersey组件,并...
源码分析 在 `MySpringMVC` 压缩包中,你应该找到了这个简单示例的完整源代码。通过查看这些文件,你可以更深入地理解 Spring MVC 的工作原理和配置细节。 总结: 本教程介绍了如何从零开始构建一个简单的 ...
在这个"springweb代码"压缩包中,很可能是包含了一些Spring Web项目的源码或者配置文件。下面,我们将深入探讨Spring Web的相关知识点。 1. **Spring MVC架构**: - **Model**:模型层,通常由JavaBean组成,存储...
通过分析这个"spring-web"源码,我们可以深入学习Spring框架如何处理Web请求,理解Spring MVC的内部工作原理,以及如何利用Spring提供的各种工具和组件来构建高效、灵活的Web应用程序。对于Spring框架的学习和进阶,...
5. **Tomcat源码分析** 对于Tomcat的实现细节,主要关注以下几点: - **启动/初始化**:Tomcat启动时会解析web.xml,创建并初始化应用的组件。 - **并发线程模式**:Tomcat使用线程池来处理并发请求,提高性能。 ...
此外,还需要配置ContextLoaderListener,用于初始化Spring的ApplicationContext。 MyBatis作为持久层框架,它的核心是SqlSessionFactory,通过它创建SqlSession对象,进而执行SQL操作。在SpringMVC+MyBatis的整合...
**标题:“dwr和ssh的集成源码”** ...总的来说,这个集成示例对于初学者来说是一份宝贵的教育资源,虽然可能存在不规范之处,但通过对这些代码的分析和修改,可以加深对DWR和SSH框架的理解,进一步提高开发技能。
- 配置 ContextLoaderListener,用于启动 Spring 上下文,加载配置文件。 5. **创建 Controller** 在 `src/main/java` 下创建对应的包,如 `com.example.controller`,然后创建一个 Controller 类,例如 `...