定义
- 将程序中手动创建对象的控制权交给框架处理
- spring ioc 容器是 ioc 的实现,存储的是一个 map
bean 生命周期
- bean 初始化
- bean 属性设置
- 检查 Aware 接口,并且实现相关的依赖
BeanNameAware
,setBeanName()
方法获得 bean 在 ioc 容器中的编号BeanFactoryAware
,setBeanFactory(Benfactory)
方法获得 Spring 工厂本身ApplicatonContextAware
,setApplicationContext(ApplicationContext)
获得 Spring 上下文呢
- 检查
BeanPostProcess
接口,并且执行前置处理- 运行
postProcessBeforeInitialization(Object, String)
方法
- 运行
- 检查
InitializingBean
接口,运行afterPropertiesSet()
方法 - 如果在 spring 配置文件中配置了
init-method
属性,会自动调用其配置的初始化方法 - 检查
BeanPostProcess
接口,并且执行后置处理- 运行
postProcessAfterInitialization(Object, String)
方法
- 运行
- 当 bean 不再需要,会经过清理阶段,如果 Bean 实现了
DisposableBean
接口,会调用实现的destroy()
方法 - 如果 spring 配置文件中配置了
destroy-method
属性,会自动调用其配置的销毁方法
bean 的创建过程
- 调用
getBean()
方法 - 判断当前 bean 的作用域是不是
singleton
,如果是则走缓存查找,没有查找则新建实例并且保存到缓存中;如果不是singleton
,那么会新建实例 (createBeanInstance()
) - 新建实例后再注入属性 (
populateBean()
),并且处理回调- 创建 bean
- 找到
@Autowired
的对象 - 创建注入对象,并且赋值