spring bean的定义
bean 是构成应用程序的支柱,也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的,例如可以由 XML 配置文件进行定义。
spring bean的属性
| 属性 | 描述 |
|---|---|
| class | 这个属性是强制性的,并且指定用来创建 bean 的 bean 类。 |
| name | 这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。 |
| scope | 这个属性指定由特定的 bean 定义创建的对象的作用域,它将会在 bean 作用域的章节中进行讨论。 |
| constructor-arg | 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。 |
| properties | 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。 |
| autowiring mode | 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。 |
| lazy-initialization mode | 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。 |
| initialization 方法 | 在 bean 的所有必需的属性被容器设置之后,调用回调方法。它将会在 bean 的生命周期章节中进行讨论。 |
| destruction 方法 | 当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。 |
spring bean的作用域
| 作用域 | 描述 |
|---|---|
| singleton(单独) | 只存在一个对象实例,在IoC容器创建时则会实例化这种单独实例 |
| prototype(原型,雏形) | 每次对bean请求时,容器都会创建一个新的bean实例 |
| request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境 |
| session | 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境 |
| global-session | 一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境 |
作用域选择的经验规则:根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
spring bean的生命周期
注意:bean的后置处理器的类型也是bean,这一类bean用于对其他bean在初始化前后进行额外的处理
| 生命阶段 | 行为 |
|---|---|
| bean的定义 | 定义bean |
| bean后置处理器(BeanPostProcessor)调用postProcessBeforeInitialization | 在bean初始化之前进行前置操作postProcessBeforeInitialization |
| bean的初始化 | 调用init-method方法 |
| bean后置处理器(BeanPostProcessor)调用postProcessAfterInitialization | 在bean初始化之后进行后置操作postProcessAfterInitialization |
| bean的使用 | 使用bean |
| bean的销毁 | 调用destroy-method方法 |
spring bean的继承
bean的继承机制使子bean能够继承或改写父bean的配置信息,也可以添加额外的新的配置信息,其中bean的配置信息包括:构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。
提示:可以创建纯粹的抽象bean模板,以便作为参考模板给其他bean继承或改写,实现方法是将bean的abstract属性设置为true,并且不指定class属性。