1.概念态
我们手动声明一个类为一个springBean,例如@Bean配置,@Service标签等。
2.定义态
springApplictionContext容器中启动后会将我们声明的springBean的信息存储到beanDefinitionMap中,当中存储着这个bean的各种属性,如下图
image.png
3.纯静态:
Object bean = BeanDefinition.beanclass.newInstance();
这里spring通过反射创建出的对象和我们手动通过无参数构造器创建对象一样,只是对象创建,但对象中的属性都是空。
之后就开始spring的依赖注入,将创建对象中的属性赋值。
4.成熟态
image.png
@Component 将类标记为springBean
springBoot项目启动,new ApplicationContext()
调用refresh()方法
执行invokeBeanFactoryPostProcessors(beanFactory) 方法,将标记springBean的信息存储在beanFactory的beanDefinitionMap中如图
image.png
之后运行finishBeanFactoryInitialization(beanFactory)方法
调用beanFactory.preInstantiateSingletons()方法
该方法中会循环创建bean,getBean(beanName)为创建方法
image.png









网友评论