前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springIOC-spring源码详解(二)

springIOC-spring源码详解(二)

作者头像
用户9919783
发布2022-12-14 18:28:31
2110
发布2022-12-14 18:28:31
举报

映入眼帘,源码里是大家都熟悉的三个方法,首先执行的是this(),调用构造函数,

通过AnnotatedBeanDefinitionReader这里会读取很多重要的初始类,

ConfigurationClassPostProcessor就是在这里注册,不然我们后面无法通过注解来解析和注册bean。

这个类实现了我们上篇文章说的两个接口,

BeanFactoryPostProcessor和BeanFactoryPostProcessorRegister。

前面说的都是注册成功配置类,后面在refresh()里开始解析配置类。

这里面会解析@bean,@importResource,@import,@ComponentScan。

后面finishBeanFactroyInitialization(beanFactory)实例化我们剩余的单例bean。

在实例化单实例的代码如上,先会通过freezeConfiguration冻结bean属性,禁止修改,其实就是把configurationFrozen参数改为false。

PreInstantiateSingletons()里先获取所有的beanNames,然后判断不是抽象,是单例,不是懒加载的进入。

当这里定义的bean没有实现factoryBean的时候,则走下面的getBean()。

前面的markBeanAsCreated就是标记当前bean正在创建的状态。

后面getDependsOn()则是当bean有@dependsOn注解的时候,会优先加载despendsOn的bean。

这里createBean则还是创建bean,在之前getSingleton会把bean标记成正在创建,解决循环依赖的时候,正在创建很关键。

这里开始调用一些扩展的后置处理器,调用完之后还是正式创建bean。

调用完成之后开始实例化bean。

实例化通过反射和工厂,反射通过@component直接作用在类上,spring实例化。工厂则是通过new的方法,比如@bean+configuration。

getEarlyBeanRefrence解决循环依赖的。

之后popuateBean填充属性,调用set方法进行赋值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档