1. 周期方法配置
1.1 周期方法概念
我们可以在组件类中定义方法,然后当IoC容器实例化和销毁组件对象的时候进行调用。这两个方法被称为生命周期方法,我们可以在周期方法完成初始化和释放资源等工作。
1.2 周期方法样例
public class Bean {
//周期方法要求: 方法命名随意,但是要求方法必须是 public void 无形参列表
public void init() {
// 初始化逻辑
}
public void clear() {
// 释放资源逻辑
}
}
1.3 XML配置文件
<beans>
<bean id="bean" class="examples.Bean" init-method="init" destroy-method="clear"/>
</beans>
- init-method = “初始化方法名”
- destroy-method = “销毁方法名”
2. 组件作用域配置
2.1 Bean作用域概念
<bean 标签声明Bean,只是将Bean的信息配置给SpringIoC容器。
在IoC容器中,这些<bean 标签对应的信息转成Spring内部 BeanDefinition 对象,BeanDefinition 对象内,包含定义的信息(id,class,属性等等)。
这意味着,BeanDefinition与类概念一样,SpringIoC容器可以可以根据BeanDefinition对象反射创建多个Bean对象实例。
具体创建多少个Bean的实例对象,由Bean的作用域Scope属性指定!
2.2 作用域取值
取值 | 含义 | 创建对象的时机 | 默认值 |
---|---|---|---|
singleton | 在 IOC 容器中,这个 bean 的对象始终为单实例 | IOC 容器初始化时 | 是 |
prototype | 这个 bean 在 IOC 容器中有多个实例 | 获取 bean 时 | 否 |
如果是在WebApplicationContext环境下还会有另外两个作用域(但不常用):
取值 | 含义 | 创建对象的时机 | 默认值 |
---|---|---|---|
request | 请求范围内有效的实例 | 每次请求 | 否 |
session | 会话范围内有效的实例 | 每次会话 | 否 |
2.3 XML配置文件
<beans>
<bean id="bean" scope="prototype" class="examples.Bean" />
</beans>
- scope的默认值为singleton,可以省略