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 的前后进行
- applyBeanPostProcessorsBeforeInitialization
- invokeInitMethods
- 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