不死鸟.亚历山大.狼崽子

不死鸟.亚历山大.狼崽子

1 加载Bean定义

通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中

2 创建Bean对象

通过createBean遍历beanDefinitionMap创建bean

2.1构建对象

1 容器通过 createBeanInstance 进行对象构造

  • 获取构造方法:@Autowired

2 准备参数

  • 根据类查找>参数名查找

3 构造对象

  • 无参对象直接实例化

2.2 填充属性

通过populateBean方法为Bean内部所需的属性进行赋值

  • 通常是 @Autowired 注解的变量
  • 2.3 初始化Bean对象

通过initializeBean对填充后的实例进行初始化

(1)填充初始化容器相关信息

通过invokeAwareMethods方法:为实现aware接口【信息感知接口】的Bean 设置注入beanName、beanFactory等容器信息

(2)初始化构造方法

通过invokeInitMethods方法进行初始化:如果Bean实现InitializingBean接口进行处理【未实现则不进行】

  • afterPropertiesSet方法【bean填充属性后执行】
  • initMethod 方法

(3)Bean的后置处理

在invokeInitMethods 的前后进行

  1. applyBeanPostProcessorsBeforeInitialization
  2. invokeInitMethods
  3. applyBeanPostProcessorsAfterInitialization

在后置处理中处理了包括:AOP【AnnotationAwareAspectJAutoProxyCreator】

负责构造后@PostConstruct和销毁前@PreDestroy的InitDestoryAnnotationBeanPostProcessor等

(4)注册销毁

通过reigsterDisposableBean处理实现了DisposableBean接口的Bean的注册

3 添加到单例池

通过 addSingleton 方法,将Bean 加入到单例池 singleObjects

4 销毁

4.1 销毁前

调用 bean中@PreDestory 注解的方法

通过 postProcessBeforeDestruction 方法调用destoryBean逐一销毁Bean

4.2 销毁

调用 destoryBeans

4.3 执行客户自定义销毁

调用 invokeCustomDestoryMethod

06-22 19:26