Spring源码流程断点调试总结

本文详细解析了Spring框架中Bean的实例化过程与依赖注入的实现机制,从AnnotatedBeanDefinitionReader读取配置,到AbstractAutowireCapableBeanFactory进行属性赋值,深入探讨了反射及循环依赖的处理方式。

1.AnnotatedBeanDefinitionReader 读取所有要扫描的文件

2.AnnotationConfigUtils  把所有要放入容器中的beanName放入集合中

3.DefaultListableBeanFactory通过循环一次生产bean

4.AbstractAutowireCapableBeanFactory进行属性赋值

属性赋值最后还是通过反射进行的

 

当创建完一个对象是他会对这个对象进行属性赋值,属性赋值他他是循环遍历进行的,具体逻辑如下

上面PropertyDescriptor[] filteredPds = filterPropertyDescriptorsForDependencyCheck(bw, mbd.allowCaching)会拿此对象需要那几个属性进行赋值,然后到AutowiredAnnotationBeanPostProcessor的postProcessPropertyValues方法里进行赋值

整体截图

1.DefaultListableBeanFactoryd的737行代码,他会把前期准备好的扫描到的beanNames(放在list)中然后for循环进创建bean,再次循环的过程中有的类比如说
  TestController类里它包含TestService类,在创建TestController 完成之后进行属性赋值(属性赋值见下面代码流程),发现TestService 不在容器中,则
  继续走创建bean流程,创建完放在容器中,紧接着在下次循环数组时发现容器中已经存在了,则直接返回在遍历下一个
2.AbstractAutowireCapableBeanFactory 582行代码populateBean(beanName, mbd, instanceWrapper);进行属性赋值
3.AbstractAutowireCapableBeanFactory 1344行代码调用AutowiredAnnotationBeanPostProcessor的postProcessPropertyValues方法(368)行代码进行
4.DefaultListableBeanFactory 的1072行代码doResolveDependency方法
5.DependencyDescriptor 的resolveCandidate 方法beanFactory.getBean(beanName)又进行创建bean

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值