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 | <?xml version="1.0" encoding="UTF-8"?> |
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个值,其值及说明下表所示:
参考: