Spring IOC(3)----bean实例化
前面一节说到invokeBeanFactoryPostProcessors方法的调用来注册bean定义,这次来看看finishBeanFactoryInitialization这个方法实例化非懒加载的单例bean。
1.从getBean到doGetBean先尝试从单例缓存池里面获取:DefaultSingletonBeanRegistry#getSingleton;
2.如果获取到了就返回了,如果获取不到则通过bean定义:AbstractBeanFactory#getMergedLocalBeanDefinition;
3.根据bean定义去实例化bean:AbstractAutowireCapableBeanFactory#createBean;
4.期间会对AOP的切面信息进行解析缓存:AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation;
5.spring真正干活的方法一般都是doXXX,创建bean:AbstractAutowireCapableBeanFactory#doCreateBean;
6.实例化一个bean的包装对象(BeanWrapper):AbstractAutowireCapableBeanFactory#createBeanInstance,该方法内部实现及其复杂。。。。之后判断是否是单例,将对象暴露到缓存中,用于解决循环依赖问题;
7.对bean属性进行赋值:AbstractAutowireCapableBeanFactory#populateBean
8.对dean进行处理:AbstractAutowireCapableBeanFactory#initializeBean
1.回调Aware接口方法:AbstractAutowireCapableBeanFactory#invokeAwareMethods
2.调用bean的后置处理器生成代理对象返回(有可能生成对象返回):AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization/AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
9.最后添加到各级缓存中:DefaultSingletonBeanRegistry#addSingleton。
流程图:
Spring IOC(1-3)的流程图可以拼出来一个完整的从前期准备到注册bean定义,再到实例的流程,完整的流程如下:
- Spring-- Ioc 容器Bean实例化的几种场景
- 传智播客 Spring中bean的实例化方式与IOC容器总结
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- SpringIOC 实例化Bean的流程
- 传智播客-spring2.5(1)-IoC与bean的实例化、轻量级和重量级之分
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- Strategy 策略模式 在 Spring 开发中的应用 包括事务管理,日志管理(logger),IoC容器根据bean定义的内容实例化等
- (spring-第6回【IoC基础篇】)BeanDefinition——实例化Bean之前的第一大利器。
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- Spring IOC容器中Bean的实例化过程
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- Spring中bean的实例化方式与IOC容器总结
- (spring-第10回【IoC基础篇】)InstantiationStrategy--实例化Bean的第三大利器
- (spring-第9回【IoC基础篇】)BeanFactoryPostProcessor,实例化Bean之前的第二大利器
- (spring-第11回【IoC基础篇】)BeanWrapper--实例化Bean的第四大利器
- Spring源码分析(二)bean的实例化和IOC依赖注入
- 传智播客-spring2.5(1)-IoC与bean的实例化、轻量级和重量级之分
- 5_515自己的收获关于IOC+DI注入+三种实例化Bean+Spring的生命周期
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- (spring-第13回【IoC基础篇】)PropertyEditor(属性编辑器)--实例化Bean的第五大利器