Spring之Bean生命周期源码解析(一)
- Bean生命周期流程
- Bean包扫描底层流程
- MetadataReader
- 合并BeanDefinition
- 加载类
什么是Bean的生命周期
Bean的生命周期就是指: 在Spring中,一个Bean是如何生成的,如何销毁的
Bean生命周期流程图
Bean的生命周期:
- 启动ApplicationContext
- 创建BeanFactory
- 初始化BeanFactory
- 在BeanFactory后置处理:在这里会进行包扫描,找到所有符合条件的class文件
- 生成BeanDefition
- 合并BeanDefinition
- 加载类
- 实例化前
- 实例化
- 推断构造
- 实例化
- BeanDefinition的后置处理
- 实例化后
- 填充属性
- 填充属性后
- 执行Aware回调接口
- 初始化前
- 初始化
- 初始化后
Bean包扫描底层流程图
Spring期启动的时候会进行包扫描,会先调用
ClassPathScanningCandidateComponentProvider#scanCandidateComponents(String basePackage)
去扫描某个包路径,并且将需要的class文件解析成BeanDefinition然后放到一个set集合中.
Spring包扫描底层流程:
- 首先通过ResourcePatternResolver获得指定包路径下的所有.class文件(在Spring源码中,会把此文件包装成Resouce对象)
// 获取basePackage下所有的文件资源
String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
resolveBasePackage(basePackage) + '/' + this.resourcePattern;
// Class文件的File对象
Resource[] resources = getResourcePatternResolver().getResources(packageSearchPath);
- 遍历每个Resource对象
for (Resource resource : resources