IOC
-
Java 对象
- new Object()
-
spring bean
- 是一个 java 对象
- 经历 spring 生命周期
- 在 spring 容器
-
Java 对象 创建过程
- javac Object.java -> Object.class
- main 启动 JVM
- 遇到 new 关键字时,JVM 加载 class 文件,创建对象放到堆中
-
Spring Bean 创建过程
- javac Object.java -> Object.class
- main 启动 JVM
- spring 扫描需要创建 bean 的 Object
- 将 Object 类转换成一个
BeanDifinition
对象- org.springframework.beans.factory.config.BeanDefinition 是一个接口
- 常用的实现类是
GenericBeanDefinition
- AnnotatedGenericBeanDefinition
- ScannedGenericBeanDefinition
- RootBeanDefinition
- 将其保存在 DefaultListableBeanFactory 的
Map<String, BeanDefinition> beanDefinitionMap
中 - 校验 BeanDifinition
- 检查开发者是否对 spring bean 初始化进行拓展,即实现 BeanFactoryPostProcessor 接口;
- 若存在拓展,则对某些 BeanDifinition 实例进行一些修改
- 如果是
单例
且满足其他一些条件,则在 spring 初始化时利用java 反射
创建对象,放到 单例缓存池中DefaultSingletonBeanRegistry 的 Map<String, Object> singletonObjects
- CommonAnnotationBeanPostProcessor 处理器处理 @Resource;
AutowiredAnnotationBeanPostProcessor
处理器处理 @Autowired 注解;