spring核心技术之二:Bean

Spring IOC容器负责管理bean, bean用来配置元数据的,就是用户需要的对象类。一个bean可以包含以下元数据信息:

bean配置信息

  1. 带有包结构的类名:该类名是定义bean的具体实现类名。
  2. bean行为配置元素:包括bean 范围,周期,响应等。
  3. 该bean工作需引用的其他bean:collaborators 和dependencies。
  4. 其他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进行处理,非常感谢!

上一篇 2018年9月5日
下一篇 2018年9月5日

相关推荐