Spring IOC容器负责管理bean, bean用来配置元数据的,就是用户需要的对象类。一个bean可以包含以下元数据信息:
bean配置信息
- 带有包结构的类名:该类名是定义bean的具体实现类名。
- bean行为配置元素:包括bean 范围,周期,响应等。
- 该bean工作需引用的其他bean:collaborators 和dependencies。
- 其他bean配置信息:如数据库连接信息,及连接池大小及连接数目等等。
Bean初始化
所谓初始化,就是Bean根据配置好的元数据项,如何创建或者获取一个实际的对象。可通过构造函数,静态工厂方法和实例化工厂方法来实例化bean,供IOC容器调用。
Bean依赖注入
一个企业应用中不可能各个bean之间是独立的,需要各个bean能相互依赖,协作共同实现一个业务功能。
DI(Dependency Injection)依赖注入如何实现呢? 一种基于带参构造函数,一种是通过基于setter方法。实际开发中大部分spring用户通过annotated组件(如@component,@Controller,@Service等等)来实现注入,而不是xml配置文件。
Bean 作用域
作用域限定了Spring Bean的作用范围,Spring Framework 支持6种作用域,即singleton,prototype,request,session,application,websockert,其中后4种只用于基于web应用的容器,除此之外还可以自定义作用域。
singleton单例:使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。如下图
singleton作用域
prototype原型:使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。如下图
prototype原型
request请求:该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。
session会话:该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。
application应用:该属性仅用于ServletContext的生命周期中,同一个ServletContext共享一个Bean实例。
自定义custom scopes: 通过
org.springframework.beans.factory.config.Scope接口来自定义,如下:
Scope threadScope = new SimpleThreadScope();beanFactory.registerScope("thread", threadScope);
使用自定义scope
<bean id="..." class="..." scope="thread">
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!