Spring的IOC容器—scope作用域

Scope 简介:

Scope用来声明容器中的对象的存货时间。即容器在对象在进入其相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象。

Sprign容器最初提供了两种bean的scope类型:singletoon和prototype。自Spring2.0之后,引入了另外三种scope类型,即request、session和global session类型。这三种类型只能再web中使用。

1.Singleton

代表在Spring的IOC容器中只存在一个实例,所有对象引用共享该实例。 该实例从容器启动,并因第一次请求而初始化之后,将一直存活到容器中。与IOC容器共生共灭。

注意:Singleton作用域与Singleton模式的区别

标记Singleton的bean代表这种类型的bean在容器中只存在一个共享实例,而Singleton模式则是保证在同一个classloader中只存在一个这种类型的实例。

Singleton 特性:

A. 对象实例数量:容器中只存在一个实例,所有对该类型bean的依赖都引用这单一实例。

B. 对象存活时间:从容器启动,到第一次因请求而实例化开始,只要容器不销毁或退出,该实例一直存在。

配置形式

<bean id="mockObject1"class="...MockBusinessObject"/>

<beanid="mockObject1" class="...MockBusinessObject"singleton="true"/>

<bean id="mockObject1" class="...MockBusinessObject"scope="singleton"/>

2. prototype  

容器在接到标有prototype类型对象的请求后,会每次重新生成一个新的对象实例给请求方。请求方负责当前返回对象的后继生命周期工作,包括对象的销毁。

一般声明此类型的bean都是一些有状态的。比如保存每个顾客信息的对象。

配置形式:

<bean id="mockObject1" class="...MockBusinessObject"singleton="false"/>

<bean id="mockObject1" class="...MockBusinessObject" scope="prototype"/>

3. request、sessiion和global
session

它们只适用于Web应用程序,通常是与XmlWebApplicationContext共同使用

.request

配置形式:<bean id="userManager"class="... "scope="request"/>

Spring容器,即XmlWebApplicationConteext会为每个Http请求创建一个新的requestProcessor对象供当前对象使用,当请求结束后,该对象实例的生命周期即告结束。当同时有10个Http请求进来,容器会分别为这10个请求返回10个全新的实例,且它们之间互不干扰。

.session 

配置形式:
<bean id="userManager"class="...userManager "scope="session"/>

Spring容器会为每个独立的session创建属于它们自己的全新的userManager对象实例。存活时间大于request。

.global session

配置形式: <bean id="userManager" class="...userManager"scope="globalSession"/>

global session只有应用在基于portlet的Web应用程序中才有意义,它映射到portlet的global范围的
session。如果在普通的基于servlet的Web应用中使用了这个类型的scope,容器会将其作为普通的session

类型的scope对待。

4.自定义scope类型

用户可以根据自己的需要,添加自定义的scope类型。除了默认的singleton和prototype之外,其他三种类型,包括自定义类型都实现了org.springframework.beans.factory.config.Scope接口。该接口定义如下:

public interface Scope {
	Object get(String name, ObjectFactory objectFactory);
	Object remove(String name);
	void registerDestructionCallback(String name, Runnable callback);
	String getConversationId();
}

要实现自己的scope类型,首先需要给出一个Scope接口的实现类,接口定义中的4个方法并非都是必须的,但get和remove方法必须实现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-01 17:35:02

Spring的IOC容器—scope作用域的相关文章

Spring核心技术IoC容器(五)

前文概述了Spring的容器,Bean,以及依赖的一些信息,本文将描述一下Bean的作用域 Bean的作用域 当开发者定义Bean的时候,同时也会定义了具体如何创建Bean实例的步骤.这些步骤是很重要的,因为只有通过这些配置,开发者才能创建实例对象. 开发者不仅可以控制多种多样的依赖到Bean之中,也可以配置Bean的作用域.这种方法是非常强大而且弹性也非常好,开发者可以通过配置来指定对象的作用域,而不用在Java类层次上来配置.Bean可以配置多种作用域.Spring框架支持5中作用域,有三种

spring在IoC容器中装配Bean详解

1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean实例放入bean缓存池: 应用程序使用bean. 1.2.基于xml的配置 (1)xml文件概述 xmlns------默认命名空间 xmlns:xsi-------标准命名空间,用于指定自定义命名空间的schema文件 xmlns:xxx="aaaaa"-------自定义命名空间,xx

Spring核心技术IoC容器(六)

前文已经描述了Bean的作用域,本文将描述Bean的一些生命周期作用,配置还有Bean的继承. 定制Bean 生命周期回调 开发者通过实现Spring的InitializeingBean和DisposableBean接口,就可以让容器来管理Bean的生命周期.容器会调用afterPropertiesSet()前和destroy()后才会允许Bean在初始化和销毁Bean的时候执行一些操作. JSR-250的@PostConstruct和@PreDestroy注解就是现代Spring应用生命周期回

Spring之IOC容器加载初始化的方式

引言 我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配置文件告诉Spring 的IOC容器.在我们的完成这些配置文件以后,如果IOC容易要实现对这些Bean的管理,除了资源的定位还有一个很重要的一步就是完成IOC加载初始化,也就是配置文件的载入过程.完成IOC容器加载初始化的方式只要有三种,第一种就是通过File文件加载,第二种是通过Classpath

Spring核心技术IoC容器(八)

本文针对自动装载的一些注解进行描述. 基于注解的容器配置 @Required注解 @Required注解需要应用到Bean的属性的setter方法上面,如下面的例子: public class SimpleMovieLister { private MovieFinder movieFinder; @Required public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } //

Spring的IOC容器—依赖注入

前面一篇博客大致讲了一下Spring的IOC容器的原理,IOC即控制反转主要是依靠依赖注入的方式来实现的.依赖注入是指所依赖的对象不是由自己new出来的,而是用别的方式像打针似的注入进来. 其实说白了不管是控制反转还是依赖注入都说明了Spring采用动态.灵活的方式来管理各种对象. Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理.有以下几种注入方式: 1. Setter 注入 因为对于javaBean来说,我们可以通过setter和getter方法

好莱坞原则—Spring的IOC容器

IOC容器的概念,之前在学习SSH的时候,就有接触过.但那时候也仅仅是知道这么个概念,认为它非常难理解.事实上并非它难理解,而是我并没有停下来好好对它总结梳理过. IOC(Inversion of Control)简单介绍: 控制反转",并非一种技术.而是一种思想.一种主动提供服务的思想.所谓IOC,就是由Spring负责控制对象的生命周期和对象间的关系,与我们传统的在对象内部直接控制背道而驰. 在传统的程序开发中,完毕一个业务逻辑至少须要两个或两个以上的对象协助完毕.通常一个对象要使用另外一个

Spring框架IOC容器和AOP解析

主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.Spring开源框架的简介  Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开

Spring 核心技术 IoC容器(一)

IoC 容器 IoC容器和Bean简介 这章包括了Spring框架对于IoC规则的实现.Ioc也同DI(依赖注入).而对象是通过构造函数,工厂方法,或者一些Set方法来定义对象之间的依赖的.容器在创建这些Bean对象的时候同时就会注入这些依赖.这个过程是根本上的反转了,不再由Bean本身来控制实例化和定位依赖,而是通过服务定位来控制这个过程,也是IoC(控制反转)的由来. org.springframework.beans和org.springframework.context包是Spring框