首页 > 编程语言 > 详细

spring源码分析——依赖注入

时间:2020-06-30 23:16:26      阅读:93      评论:0      收藏:0      [点我收藏+]

 

  spring容器的核心IOC和Aop,其中ioc控制反转,就是spring容器帮助程序员创建对象以及维护对象之间的依赖关系,

DI依赖注入就是其中非常重要的一环,我们平常使用比较多的就是set注入、构造器注入,使用@Autowired、@Resource注解注入等,

下面我们就分析一下spring源码是怎么实现的。

一:set注入

准备环境:

在spring-context.xml中配置student的bean信息

	<bean id="student" class="com.hello.model.Student">
		<property name="height" value="100"></property>
		<property name="weight" value="300"></property>
	</bean>

  技术分享图片

 

 

运行结果:

 技术分享图片

 

 

 下面从源码来看一下set注入:

在解析spring-context.xml的时候,解析bean元素,会解析到子元素property,这个部分在默认标签解析那节分析过,然后把属性值封装

到MultablePropertyValues对象上,放到BeanDefinition对象上面缓存

技术分享图片

 

 

 

进入polulateBean方法中:

从BeanDefinition对象中拿到PropertyValues属性:

技术分享图片

 

 

应用属性值:

 技术分享图片

 

 

 

 技术分享图片

 

 

 

技术分享图片

 

 

 

技术分享图片

 

 

 技术分享图片

 

 

 刚才我们使用的是set注入,直接注入的字符串,如果使用ref,注入对象,会如何处理?

看一下下面标注的这行代码,根据原始值获取value值:

技术分享图片

 

 

如果是字符串类型,则直接获取字符串的值,上面的value=“100”,就是走到这里

技术分享图片

 

 

如果是引用类型,会走到如下分支代码:

技术分享图片

 

 

根据参数名称,到beanFactory容器中获取bean对象,其他的步骤和字符串的value一样

技术分享图片

 

 二:构造器注入

构造器注入的方式就是上一节分析的有参数构造器的创建过程,在实例化的过程中就实现了注入

	<bean id="student" class="com.hello.model.Student">
		<constructor-arg index="0" value="100"/>
		<constructor-arg index="1" value="200"/>
	</bean>

运行结果:

技术分享图片

 

 分析过程见上一节实例化对象的分析

三:@Autowired注解注入依赖

准备工作:

技术分享图片

 

 运行结果:

技术分享图片

 

spring源码分析——依赖注入

原文:https://www.cnblogs.com/warrior4236/p/13216415.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!