概述
一:什么是DI
DI:Dependency Injection ,即依赖注入,容器全权负责组件的装配,它会把符合依赖关系的对象通过属性(JavaBean中的setter)或者是构造方法传递给需要的对象。
二:时序图
三:浅析
DI可以大致分为实例化,赋值注入两个阶段。
1.实例化阶段
因为Spring默认是懒加载的,所以要调用getBean()方法时才会进行实例化,所以代码的入口应该是BeanFactory的getBean(),而BeanFactory的getBean()实际上调用的应该是AbstractBeanFactory的getBean(),而在getBean()中又调用了doGetBean()方法,而doGetBean()方法中调用了AbstractAutowireCapableBeanFactory中的createBean(),然后调用doCreateBean(),再接着调用createBeanInstance(),再调用instantiateBean()方法,接着调用SimpleInstantiationStrategy中的instantiate()方法,最后通过调用BeanUtils中的instantiateClass()方法进行实例化,而instantiateClass()实际上就是通过反射进行实例化。
2.赋值注入阶段
AbstractAutowireCapableBeanFactory类中调用了createBeanInstance()进行了实例化之后,还调用了populateBean()方法来进行属性注入,populateBean()中调用了applyPropertyValues()方法,applyPropertyValues()方法调用了AbstractPropertyAccessor的setPropertyValues()方法,setPropertyValues()方法中循环调用setPropertyValue()方法,setPropertyValue()方法实际调用的AbstractNestablePropertyAccessor中的setPropertyValue(),然后调用AbstractNestablePropertyAccessor的processLocalProperty,最后调用BeanWrapperImpl的setValue()方法进行赋值
最后
以上就是干净哑铃为你收集整理的Spring--绘制DI时序图的全部内容,希望文章能够帮你解决Spring--绘制DI时序图所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复