SpringBean

Bean的配置

详见bean是什么

属性 描述
id id为bean的唯一标识名,,在整个XML中唯一
name 为bean id创建一个或多个别名(区别于id)。如果没有定义bean的id,那么第一个别名就会被作为id;如果也没有定义name,那么自动生成一个id和一个别名(这时的别名为类的全类名且类名首子母小写)
class 定义类的全限定名(包名+类名);只有子类Bean不用定义该属性
parent 子类Bean定义它所引用它的父类Bean,这时class属性失效。子类Bean会继承父类Bean的所有属性,子类Bean也可以覆盖父类Bean的属性;注意:子类Bean和父类Bean是同一个Java类
abstract 默认为”false”,用来定义Bean是否为抽象Bean;它表示这个Bean将不会被实例化,一般用于父类Bean,因为父类Bean主要是供子类Bean继承使用
scope 默认为singleton(单例);如果设prototype(原型)状态,BeanFactory将为每次Bean请求创建一个新的Bean实例
lazy-init 定义Bean是否实现懒初始化;默认为“default” ,如果为“true”,它将在BeanFactory启动时初始化所有的SingletonBean;反之,如果为“false”,它只在Bean请求时才开始创建SingletonBean
autowire 定义Bean的自动装载方式
1.“no”:不使用自动装配功能
2.“byName”:通过Bean的属性名实现自动装配
3.“byType”:通过Bean的类型实现自动装配
4.“constructor”:类似于byType,但它是用于构造函数的参数的自动组装
5.“default”:默认值,自动装配
depends-on Bean在初始化时依赖的对象,这个对象在这个Bean初始化之前创建
destroy-method 定义Bean的销毁方法,它在BeanFactory关闭时调用;是一个无参数的方法,只能应用于singletonBean
factory-method 创建Bean对象的工厂方法
factory-bean 创建Bean对象的工厂类;如果使用了“factory-bean”则“class”属性失效

Spring 配置元数据

有下面三个重要的方法把配置元数据提供给 Spring 容器:

  • 基于 XML 的配置文件
  • 基于注解的配置
  • 基于 Java 的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="..." class="..."></bean>

<bean id="..." class="..." lazy-init="true"></bean>

<bean id="..." class="..." init-method="..."></bean>

<bean id="..." class="..." destroy-method="..."></bean>

</beans>

Bean的作用域

作用域 描述
singleton 该作用域将 bean 的定义的限制在每一个 Spring IoC 容器中的一个单一实例(默认)。
prototype 该作用域将单一 bean 的定义限制在任意数量的对象实例。
request 该作用域将 bean 的定义限制为 HTTP 请求。只在 web-aware Spring ApplicationContext 的上下文中有效
session 该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效
global-session 该作用域将 bean 的定义限制为全局 HTTP 会话。只在 web-aware Spring ApplicationContext 的上下文中有效

singleton 作用域:

如果作用域设置为 singleton,那么 Spring IoC 容器刚好创建一个由该 bean 定义的对象的实例。该单一实例将存储在这种单例 bean 的高速缓存中,以及针对该 bean 的所有后续的请求和引用都返回缓存对象。

默认作用域是始终是 singleton,但是当仅仅需要 bean 的一个实例时,你可以在 bean 的配置文件中设置作用域的属性为 singleton,如下所示:

Bean的生命周期

理解 Spring bean 的生命周期很容易。当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态。同样,当 bean 不再需要,并且从容器中移除时,可能需要做一些清除工作。

尽管还有一些在 Bean 实例化和销毁之间发生的活动,但是本章将只讨论两个重要的生命周期回调方法,它们在 bean 的初始化和销毁的时候是必需的。

为了定义安装和拆卸一个 bean,我们只要声明带有 init-method 和/或 destroy-method 参数的 。init-method 属性指定一个方法,在实例化 bean 时,立即调用该方法。同样,destroy-method 指定一个方法,只有从容器中移除 bean 之后,才能调用该方法。

Bean的生命周期可以表达为:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁

Bean的装配方式

  • 基于XML的装配
  • 基于注解的装配
  • 自动装配

基于XML的装配

方式一:设置注入 :在配置文件中,使用元素来为每个属性注入值

方式二:构造注入:在配置文件中,使用元素来为参数注入值

基于注解的装配

基于XML的装配可能会导致XML配置文件过于臃肿,Spring提供Annotation(注解)来解决问题

自动装配

自动装配,就是将一个Bean自动的注入到到其他Bean的Property中。 Spring的元素中包含一个autowire属性,我们可以通过设置autowire的属性值来自动装配Bean。autowire属性有5个值,其值及说明下表所示:

参考:

Spring Bean 定义

spring bean元素的内置属性和子元素

Spring中Bean的装配方式