spring bean创建流程
2023-02-20 17:17:40 15 举报
spring bean创建流程
作者其他创作
大纲/内容
填充属性
populateBean() 填充设置属性
finishBeanFactoryInitialization() 设置bean工厂所需的组件,冻结BeanDefinitionx信息,开始创建单例bean对象
创建conent对象
applyBeanPostProcessorsAfterInitialization()此处执行BeanPostProcess类的postProcessAfterInitialization()方法
applyBeanPostProcessorsAfterInitialization()
是
registerListeners()注册事件监听器
否
转换设置资源路径:setConfigLocations() -> resolvePath()
调用FactoryBean的getObject方法获取实际对象
合并父类的bean定义信息(xml bean对象允许配置parent标签,此时该bean对象需要合并parent标签指定的对象的BeanDefinition信息)
prepareRefresh()设置容器激活状态
刷新容器refresh()
是否创建对象
是否FactoryBean对象
此处执行BeanPostProcess子接口MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition方法,此方法可以修改合并bean定义信息,但是该接口有两个重要实现AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor;AutowiredAnnotationBeanPostProcessor类实现了对Autowired和Value注解的扫描CommonAnnotationBeanPostProcessor类实现了对Resource、PostConstruct和PreDestroy注解的扫描;
createBean 创建bean对象
getBean()开始获取bean对象
instantiateBean() 实例化bean
此处执行BeanPostProcess子接口InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation方法和postProcessProperties方法
createBeanInstance()
执行afterPropertiesSet()方法
registerBeanPostProcessors()获取容器中注册的BeanPostProcessor,赋值给beanFactory,后续在bean实例化后,初始化前后使用。
doCreateBean()
返回FactoryBean对象
prepareBeanFactory()预处理bean工厂,设置bean工厂所需的组件参数
是否实现自定义初始化方法
preInstantiateSingletons()遍历BeanDifination创建bean对象
checkMergedBeanDefinition()是否需要创建依赖的对象
获取FactoryBean对象
开始
end
initApplicationEventMulticaster()创建事件多播器,后续使用
markBeanAsCreated()标记类为创建中
instantiateUsingFactoryMethod().通过FactoryMethod创建Bean对象
此处执行BeanPostProcess接口的postProcessBeforeInitialization方法
执行自定义初始化方法
obtainFreshBeanFactory()创建bean工厂
此处执行BeanPostProcess接口的postProcessAfterInitialization方法
invokeAwareMethods()执行设置Aware接口
查找合适的构造器反射创建bean对象
obtainFreshBeanFactory()->loadBeanDefinitions() 加载xml配置文件,解析标签,创建BeanDefinition
此处执行BeanPostProcess类的子接口SmartInstantiationAwareBeanPostProcessor,此类用于指定bean创建的构造器,有且仅有一个会被执行返回指定的构造器对象,determineCandidateConstructors()
resolveBeforeInstantiation()->applyBeanPostProcessorsBeforeInstantiation()
此处执行BeanPostProcess类的子接口InstantiationAwareBeanPostProcessor,此类用于创建bean代理对象,有且仅有一个会被执行创建bean对象,postProcessBeforeInstantiation()
是否存在Supplier方法
applyBeanPostProcessorsBeforeInitialization()
initializeBean() 初始化bean对象
applyMergedBeanDefinitionPostProcessors()
需要创建依赖的对象
1、2、3级缓存中是否存在该对象信息
是否实现InitializingBean接口
创建资源路径解析类:ResourcePatternResolver
autowireConstructor()根据构造器创建bena对象
是否存在FactoryMethod方法
determineConstructorsFromBeanPostProcessors是否通过BeanPostProcess指定类创建的构造器
收藏
0 条评论
下一页