Spring源码流程断点调试总结

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

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

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

Spring源码流程断点调试总结_第1张图片

4.AbstractAutowireCapableBeanFactory进行属性赋值

Spring源码流程断点调试总结_第2张图片

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

Spring源码流程断点调试总结_第3张图片

 

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

Spring源码流程断点调试总结_第4张图片

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

Spring源码流程断点调试总结_第5张图片

整体截图

Spring源码流程断点调试总结_第6张图片

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

Spring源码流程断点调试总结_第7张图片

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Spring相关)