定义

  • 将程序中手动创建对象的控制权交给框架处理
  • spring ioc 容器是 ioc 的实现,存储的是一个 map

bean 生命周期

  1. bean 初始化
  2. bean 属性设置
  3. 检查 Aware 接口,并且实现相关的依赖
    1. BeanNameAwaresetBeanName() 方法获得 bean 在 ioc 容器中的编号
    2. BeanFactoryAware, setBeanFactory(Benfactory) 方法获得 Spring 工厂本身
    3. ApplicatonContextAware, setApplicationContext(ApplicationContext) 获得 Spring 上下文呢
  4. 检查 BeanPostProcess 接口,并且执行前置处理
    1. 运行 postProcessBeforeInitialization(Object, String) 方法
  5. 检查 InitializingBean 接口,运行 afterPropertiesSet() 方法
  6. 如果在 spring 配置文件中配置了 init-method 属性,会自动调用其配置的初始化方法
  7. 检查 BeanPostProcess 接口,并且执行后置处理
    1. 运行 postProcessAfterInitialization(Object, String) 方法
  8. 当 bean 不再需要,会经过清理阶段,如果 Bean 实现了 DisposableBean 接口,会调用实现的 destroy() 方法
  9. 如果 spring 配置文件中配置了 destroy-method 属性,会自动调用其配置的销毁方法

bean 的创建过程

  1. 调用 getBean() 方法
  2. 判断当前 bean 的作用域是不是 singleton ,如果是则走缓存查找,没有查找则新建实例并且保存到缓存中;如果不是 singleton ,那么会新建实例 (createBeanInstance())
  3. 新建实例后再注入属性 (populateBean()),并且处理回调
    1. 创建 bean
    2. 找到 @Autowired 的对象
    3. 创建注入对象,并且赋值