1.加载Bean定义
通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中
2.创建Bean对象
通过 createBean 遍历 beanDefinitionMap 创建bean
2.1.构建对象
- 容器通过 createBeanInstance 进行对象构造
- 获取构造方法:@Autowired
- 准备参数 根据类查找>参数名查找
- 构造对象
- 无参对象直接实例化
2.2.填充属性
通过populateBean方法为Bean内部所需的属性进行赋值
- 通常是 @Autowired 注解的变量
2.3.初始化Bean对象
通过initializeBean对填充后的实例进行初始化
填充初始化容器相关信息
通过 invokeAwareMethods 方法:为实现aware接口【信息感知接口】的Bean 设置注入beanName、beanFactory等容器信息
初始化构造方法
通过 invokeInitMethods 方法进行初始化:
如果Bean实现InitializingBean接口进行处理【未实现则不进行】
- afterPropertiesSet方法【bean填充属性后执行】
- initMethod 方法
Bean的后置处理
在invokeInitMethods 的前后进行
- applyBeanPostProcessorsBeforeInitialization
- invokeInitMethods
- applyBeanPostProcessorsAfterInitialization
在后置处理中处理了包括:AOP【AnnotationAwareAspectJAutoProxyCreator】
负责 构造后@PostConstruct 和 销毁前@PreDestroy 的 InitDestoryAnnotationBeanPostProcessor 等
注册销毁
通过reigsterDisposableBean处理实现了DisposableBean接口的Bean的注册
3.添加到单例池
通过 addSingleton 方法,将Bean 加入到单例池 singleObjects
4.销毁
4.1.销毁前
调用 bean中@PreDestory 注解的方法
通过 postProcessBeforeDestruction 方法调用destoryBean逐一销毁Bean
4.2.销毁
调用 destoryBeans
4.3.执行客户自定义销毁
调用 invokeCustomDestoryMethod