传智播客学习之Spring——装配Bean

 

昨天和大家分享了Spring的起源和作用,以及它所运用到得几大模块,算是基本对Spring有了一个整体的认识,并通过了一个小实例让我们体会了以下spring,今天详细和大家分享一下装配Bean的相关问题。

一、Bean的生命周期

1.容器寻找bean的定义信息并实例化。

注:xml是最常见的spring应用系统配置源,他的三种方式这里不重复,上篇文章已经指出,此外,xml经常会被分拆成多个部分,那么多个xml文件生成一个应用上下文实例,我们可以将文件路径作为字符串数组传给ApplicationContext构造器,儿bean factory将通过调用Bean definition reader从多个文件中读取bean定义,另一种方法就是在beans元素使用一个或多个import子元素,来从其他文件加载bean定义。

2.使用依赖注入,springbean定义信息配置bean的所有属性。

注:2.5新特性将beanscope变为四种值, 即原型、单实例、sessionglobal session, spring中的bean缺省情况下是单例模式。始终返回一个实例。若想返回不同的实例的话需要定义 成原型模式。这里不同于设计模式中的硬编码的单例,可以理解为逻辑的单例。

3.bean实现了BeanNameAware接口,工厂调用BeansetBeanName()方法传递beanID

4.bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。

5.BeanPostProcessorbean关联,则它们的postProcessBeforeInitialization()方法被调用。

应用:如果我们相对已经写好的nbean进行初始化。

6.bean指定了ini-method方法、,它将被调用。

1:有可能会覆盖初始化前后处理的某些操作,所以设计了第七步,给了“后悔药”。

2:在此之后我们还可以调用定制的初始化方法,但是必须实现InitializingBean接口,不推荐使用,违背了解耦合的原则。

7.最后,若有BeanPostProcessorbean关联,则它们的postProcessAfterInitialization()方法被调用。

注:Bean的后处理的作用是用来批处理的,对所有的bean有同样的操作,有点过滤器作用经过后处理器后要保证业务逻辑(不消失不改变对象),所以返回值不要是空,要有返回参数arg0.

8.Bean使用

9.调用DisPosableBeandestroy方法

注:不要使用此接口。原理和6一样。为了高内聚,低耦合。

10.调用定制的销毁方法

二、注入依赖

1.DI:背后的基本原理是对象之间的依赖关系只会通过构造器参数、工厂方法的参数或给由构造函数或者工厂方法创建的对象设置属性。所以,容器的工作就是创建bean时注入那些依赖关系。

2.两种注入方式

1)Setter注入

通过调用无参构造器或无参static工厂方法实例化bean之后,调用该beansetter方法,即可实现基于setterDI

2)构造器注入

set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean

基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个依赖。此外,还可通过给static工厂方法传参数来构造bean。为了解决参数的不确定性,我们可以采取如下几种方式

通过参数个数

通过参数类型

通过参数索引:注意index是从0开始

注:BeanFactory对于它所管理的bean提供两种注入依赖方式,实际上它也支持同时使用构造器注入和Setter方式注入依赖

你可能感兴趣的:(传智播客学习之Spring——装配Bean)