#spring核心技术
## 基本原理-容器和bean
1、在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象。
2、org.springframework.beans.factory.BeanFactory 是Spring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bean,并对bean进行管理。
3、在Spring中,BeanFactory是IoC容器的核心接口。 它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
4、ApplicationContext在WEB应用中的实例化
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
ContextLoaderListener首先检查contextConfigLocation参数,如果它不存在,它将使用/WEB-INF/applicationContext.xml作为默认值。如果已存在,它将使用分隔符(逗号、冒号或空格)将字符串分解成应用上下文件位置路径。
5、实例化容器
ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"services.xml", "daos.xml"});
## 依赖
1、依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它对象)只会通过以下几种方式来实现:Setter注入和构造器注入。因此,容器的工作就是创建bean时注入那些依赖关系。
2、循环依赖
(1)构造器的循环依赖
(2)field属性的循环依赖
构造器的循环依赖问题无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采用的是提前暴露对象的方法。
Spring的循环依赖的理论依据基于Java的引用传递,当获得对象的引用时,对象的属性是可以延后设置的(但是构造器必须是在获取引用之前)。
3、static工厂方法返回对象实例
<bean id="exampleBean" class="examples.ExampleBean" factory-method="createInstance"> <constructor-arg ref="anotherExampleBean"/> <constructor-arg value="1"/> </bean> <bean id="anotherExampleBean" class="examples.AnotherBean"/>
public class ExampleBean { // a private constructor private ExampleBean(...) { ... } public static ExampleBean createInstance ( AnotherBean anotherBean, int i) { ExampleBean eb = new ExampleBean (...); // some other operations... return eb; } }
请注意,传给static工厂方法的参数由constructor-arg元素提供,这与使用构造器注入时完全一样。
## bean的作用域
singleton:在每个Spring IoC容器中一个bean定义对应一个对象实例。
prototype:一个bean定义对应多个对象实例。
request:在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global session:在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。
1、根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
2、request、session以及global session 仅在基于web的应用中使用,如果你用Spring Web MVC,即用SpringDispatcherServlet或DispatcherPortlet来处理请求,则不需要做特别的配置:DispatcherServlet 和 DispatcherPortlet已经处理了所有有关的状态,否则需要在Web应用的'web.xml'文件中增加 javax.servlet.ServletRequestListener 定义
<listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener>
## 定制bean特性
### 生命周期回调
1、Spring提供了几个标志接口(marker interface),这些接口用来改变容器中bean的行为;它们包括InitializingBean
和DisposableBean。实现这两个接口的bean在初始化和析构时容器会调用前者的afterPropertiesSet()方法,
以及后者的destroy()方法。
2、Spring在内部使用BeanPostProcessor实现来处理它能找到的任何标志接口并调用相应的方法。
如果你需要自定义特性或者生命周期行为,你可以实现自己的 BeanPostProcessor。
### 初始化回调
1、实现org.springframework.beans.factory.InitializingBean接口允许容器在设置好bean的所有必要属性后,执行初始化事宜。
InitializingBean接口仅指定了一个方法
void afterPropertiesSet() throws Exception;
2、通常,要避免使用InitializingBean接口并且不鼓励使用该接口,因为这样会将代码和Spring耦合起来。
有一个可选的方案是,可以在Bean定义中指定一个普通的初始化方法,然后在XML配置文件中通过指定
init-method属性来完成。
如下面的定义所示:
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean { public void init() { // do some initialization work } }
### 析构回调
1、实现org.springframework.beans.factory.DisposableBean接口的bean允许在容器销毁该bean的时候获得
一次回调。DisposableBean接口也只规定了一个方法:
void destroy() throws Exception;
2、通常,要避免使用DisposableBean标志接口而且不鼓励使用该接口,因为这样会将代码与Spring耦合在一
起。有一个可选的方案是,在bean定义中指定一个普通的析构方法,然后在XML配置文件中通过指定
destroy-method属性来完成。如下面的定义所示:
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
public class ExampleBean { public void cleanup() { // do some destruction work (like releasing pooled connections) } }
3、在Spring中有三种方式可以控制bean的生命周期行为: InitializingBean 和 DisposableBean 回调接口;
自定义init() 和 destroy() 方法; @PostConstruct 和@PreDestroy annotations.
4、在非web应用中优雅地关闭Spring IoC容器
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(new String []{"beans.xml"}); // add a shutdown hook for the above context... ctx.registerShutdownHook();
相关推荐
综上所述,"Spring核心技术文档"包含了Spring框架的关键概念和技术,是学习和掌握Spring的宝贵资源。通过深入阅读和实践,开发者可以有效地提升在企业级Java应用开发中的技能。"E书说明.txt"可能是关于如何使用或...
这个压缩包文件包含了Spring核心技术的源代码,涵盖了从基础到高级的多个章节,包括Chapter_01到Chapter_09,这将帮助我们深入理解Spring的工作原理。 首先,让我们从Chapter_01开始,这是Spring入门的基础。这一...
《Spring 2.0 核心技术与最佳实践》是由知名IT教育家廖雪峰编写的教程,旨在为从初学者到高级工程师提供全面而深入的Spring 2.0框架理解与应用指导。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛使用...
《Spring核心技术与最佳实践》一书深入探讨了Java EE Web开发中的关键技术和Spring框架的应用。Spring作为一款强大的IoC容器,不仅提供了卓越的依赖注入功能,还具备完整的Web MVC框架,使得开发高效、可扩展的Web...
Spring框架是Java开发中最广泛应用的轻量级框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向...提供的"Spring核心技术文档.chm"文件应包含了关于这些技术的详细指南和示例,是学习和参考的重要资源。
**Spring Boot核心技术详解** Spring Boot是由Pivotal团队提供的全新框架,其设计目标是为了简化Spring应用的初始搭建以及开发过程。它集成了大量的常用组件,如数据源、定时任务、缓存、邮件服务等,无需繁琐配置...
【Spring核心技术】是Java开发中不可或缺的部分,Spring框架以其强大的功能和灵活性,成为了企业级应用开发的首选。本文将深入探讨Spring的核心技术——IoC(Inversion of Control,控制反转)和AOP(Aspect ...
1. **Spring Core**: 这是Spring框架的基础,提供了DI容器,它是整个Spring框架的基石。DI允许对象之间的关系在运行时被定义和管理,而不是在代码中硬编码,这样可以提高代码的可测试性和可维护性。 2. **Spring ...
《Spring核心技术》是Spring官方文档的中英文对照版,本次版本更新为V5.0.5,提供了一个丰富的、功能强大的开发框架,并覆盖了与Spring框架紧密相关的技术核心。 Spring框架的核心技术主要包括控制反转(Inversion ...
本资料为《Spring Boot核心技术-笔记-pdf版.zip》,包含了对Spring Boot核心概念的详细解读,是学习和掌握Spring Boot不可或缺的学习资源。 在Spring Boot的核心技术中,主要涉及以下几个关键点: 1. **起步依赖...
Spring框架是Java开发中最常用的轻量级框架之一,它的核心jar包包含了实现Spring核心功能的类和库。本文将深入探讨Spring核心jar包中的关键组件、功能及其在实际开发中的应用。 1. **依赖注入(Dependency ...
SpringCloud 核心技术初识微服务解决方案 SpringCloud 是一个基于 Java 语言的微服务架构解决方案,由 Netflix 公司开发,旨在帮助开发者快速构建可靠的微服务系统。 SpringCloud 的核心技术包括服务注册、服务...
《Spring Boot 2.0深度实践之核心技术篇》是一份深入探索Spring Boot 2.0核心功能和技术的教程,旨在帮助开发者充分利用这个流行的Java开发框架,提升开发效率和项目质量。Spring Boot以其“开箱即用”的特性,简化...
1. **IoC(Inversion of Control)容器**:Spring的核心特性之一是依赖注入(Dependency Injection),也称为控制反转。IoC容器负责管理对象的生命周期和对象之间的依赖关系,使代码更易于测试和维护。 2. **AOP...
本文将深入探讨Spring核心jar包中的关键概念和技术。 1. **IoC(控制反转)与DI(依赖注入)** Spring的核心特性之一是IoC(Inversion of Control),它将对象的创建和管理权交给了Spring容器。DI(Dependency ...
02_spring核心技术-IOC.ppt
2. Spring核心概念 Spring的核心概念包括: * Bean:Spring中的Bean是指一个 Java对象,Bean可以是任何类型的对象,例如数据访问对象、业务逻辑对象等。 * 依赖关系:Spring中的依赖关系是指Bean之间的关系,依赖...
在本篇文档的第二部分,我们将深入探讨Spring的核心技术,包括控制反转(IoC)容器、事件处理、资源管理、国际化(i18n)、验证、数据绑定、类型转换、Spring表达式语言(SpEL)以及面向切面编程(AOP)。...
### Spring的核心思想 #### 一、Spring框架简介与核心概念 Spring框架是一个开源的轻量级Java开发框架,主要用于简化企业级应用的开发工作。它提供了全面的基础架构支持,包括但不限于依赖注入(Dependency ...