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

spring核心技术(1)

阅读更多

#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();

 

分享到:
评论
1 楼 迪伦少校 2019-02-01  
spring越来越优秀的同时,也越来越复杂

相关推荐

    Spring核心技术文档

    综上所述,"Spring核心技术文档"包含了Spring框架的关键概念和技术,是学习和掌握Spring的宝贵资源。通过深入阅读和实践,开发者可以有效地提升在企业级Java应用开发中的技能。"E书说明.txt"可能是关于如何使用或...

    spring核心技术源代码spring核心技术源代码1-9章

    这个压缩包文件包含了Spring核心技术的源代码,涵盖了从基础到高级的多个章节,包括Chapter_01到Chapter_09,这将帮助我们深入理解Spring的工作原理。 首先,让我们从Chapter_01开始,这是Spring入门的基础。这一...

    廖雪峰 Spring 2.0 核心技术与最佳实践 高清扫描版

    《Spring 2.0 核心技术与最佳实践》是由知名IT教育家廖雪峰编写的教程,旨在为从初学者到高级工程师提供全面而深入的Spring 2.0框架理解与应用指导。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛使用...

    Spring核心技术与最佳实践

    《Spring核心技术与最佳实践》一书深入探讨了Java EE Web开发中的关键技术和Spring框架的应用。Spring作为一款强大的IoC容器,不仅提供了卓越的依赖注入功能,还具备完整的Web MVC框架,使得开发高效、可扩展的Web...

    Spring核心技术文档.

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向...提供的"Spring核心技术文档.chm"文件应包含了关于这些技术的详细指南和示例,是学习和参考的重要资源。

    Spring Boot核心技术-笔记-pdf版.pdf

    **Spring Boot核心技术详解** Spring Boot是由Pivotal团队提供的全新框架,其设计目标是为了简化Spring应用的初始搭建以及开发过程。它集成了大量的常用组件,如数据源、定时任务、缓存、邮件服务等,无需繁琐配置...

    Spring核心技术

    【Spring核心技术】是Java开发中不可或缺的部分,Spring框架以其强大的功能和灵活性,成为了企业级应用开发的首选。本文将深入探讨Spring的核心技术——IoC(Inversion of Control,控制反转)和AOP(Aspect ...

    spring核心jar包

    1. **Spring Core**: 这是Spring框架的基础,提供了DI容器,它是整个Spring框架的基石。DI允许对象之间的关系在运行时被定义和管理,而不是在代码中硬编码,这样可以提高代码的可测试性和可维护性。 2. **Spring ...

    《Spring核心技术》中英文参照版(V5.0.5)

    《Spring核心技术》是Spring官方文档的中英文对照版,本次版本更新为V5.0.5,提供了一个丰富的、功能强大的开发框架,并覆盖了与Spring框架紧密相关的技术核心。 Spring框架的核心技术主要包括控制反转(Inversion ...

    Spring Boot核心技术-笔记-pdf版.zip

    本资料为《Spring Boot核心技术-笔记-pdf版.zip》,包含了对Spring Boot核心概念的详细解读,是学习和掌握Spring Boot不可或缺的学习资源。 在Spring Boot的核心技术中,主要涉及以下几个关键点: 1. **起步依赖...

    Spring 核心jar包

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心jar包包含了实现Spring核心功能的类和库。本文将深入探讨Spring核心jar包中的关键组件、功能及其在实际开发中的应用。 1. **依赖注入(Dependency ...

    SpringCloud核心技术-初识SpringCloud微服务解决方案.docx

    SpringCloud 核心技术初识微服务解决方案 SpringCloud 是一个基于 Java 语言的微服务架构解决方案,由 Netflix 公司开发,旨在帮助开发者快速构建可靠的微服务系统。 SpringCloud 的核心技术包括服务注册、服务...

    Spring Boot 2.0深度实践之核心技术篇

    《Spring Boot 2.0深度实践之核心技术篇》是一份深入探索Spring Boot 2.0核心功能和技术的教程,旨在帮助开发者充分利用这个流行的Java开发框架,提升开发效率和项目质量。Spring Boot以其“开箱即用”的特性,简化...

    spring-lib Spring 核心jar包

    1. **IoC(Inversion of Control)容器**:Spring的核心特性之一是依赖注入(Dependency Injection),也称为控制反转。IoC容器负责管理对象的生命周期和对象之间的依赖关系,使代码更易于测试和维护。 2. **AOP...

    Spring核心jar包

    本文将深入探讨Spring核心jar包中的关键概念和技术。 1. **IoC(控制反转)与DI(依赖注入)** Spring的核心特性之一是IoC(Inversion of Control),它将对象的创建和管理权交给了Spring容器。DI(Dependency ...

    02_spring核心技术-IOC.ppt

    02_spring核心技术-IOC.ppt

    Spring技术内幕:深入解析Spring架构与设计原理[汇编].pdf

    2. Spring核心概念 Spring的核心概念包括: * Bean:Spring中的Bean是指一个 Java对象,Bean可以是任何类型的对象,例如数据访问对象、业务逻辑对象等。 * 依赖关系:Spring中的依赖关系是指Bean之间的关系,依赖...

    Spring框架文档 - 核心技术部分 中文版 - 第二部分.pdf

    在本篇文档的第二部分,我们将深入探讨Spring的核心技术,包括控制反转(IoC)容器、事件处理、资源管理、国际化(i18n)、验证、数据绑定、类型转换、Spring表达式语言(SpEL)以及面向切面编程(AOP)。...

    spring的核心思想

    ### Spring的核心思想 #### 一、Spring框架简介与核心概念 Spring框架是一个开源的轻量级Java开发框架,主要用于简化企业级应用的开发工作。它提供了全面的基础架构支持,包括但不限于依赖注入(Dependency ...

Global site tag (gtag.js) - Google Analytics