Spring之Bean的作用域与生命周期

在前面博客中提到容器启动获得BeanDefinition对象中有一个scope 属性。该属性控制着bean对象的作用域。本章节介绍Bean的作用域及生命周期,了解bean是怎么来的又怎么没的。

一、Bean的作用域
在Bean容器启动会读取bean的xml配置文件,然后将xml中每个bean元素分别转换成BeanDefinition对象。在BeanDefinition对象中有scope 属性,就是它控制着bean的作用域。
Spring框架支持5种作用域,有三种作用域是当开发者使用基于web的ApplicationContext的时候才生效的。下面就是Spring直接支持的作用域了,当然开发者也可以自己定制作用域。

作用域

 

描述

 

单例(singleton)

 

(默认)每一个Spring IoC容器都拥有唯一的一个实例对象

 

原型(prototype

 

一个Bean定义,任意多个对象

 

请求(request

 

一个HTTP请求会产生一个Bean对象,也就是说,每一个HTTP请求都有自己的Bean实例。只在基于webSpring ApplicationContext中可用

 

会话(session

 

限定一个Bean的作用域为HTTPsession的生命周期。同样,只有基于webSpring ApplicationContext才能使用

 

全局会话(global session

 

限定一个Bean的作用域为全局HTTPSession的生命周期。通常用于门户网站场景,同样,只有基于webSpring ApplicationContext可用

 

我们可以以XMLInstance类为基础演示一下singleton和prototype作用域。
这里使用通过BeanFactory的getBean方法获取两次bean对象。

XMLInstance instance=(XMLInstance)factory.getBean("xmlinstance"); instance.setName("123"); instance.Breath(); instance=(XMLInstance)factory.getBean("xmlinstance"); instance.Breath();

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfwxj.html