欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程

依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程

2025/11/11 1:47:48 来源:https://blog.csdn.net/cuisidong1997/article/details/143264190  浏览:    关键词:依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程

前言
在分享之前,我们先来回顾一下说明是依赖注入,依赖注入中手动注入和自动装配的几种方式,以便于提高大家对本篇文章的理解。

一、依赖注入的方式
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式

所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程(将依赖关系注入到对象中)

手动注入
①使用属性的setter方法注入 ,这是最常用的方式:

要求: 属性注入要求Bean提供一个默认的构造函数,并为需要注入的属性提供对应的Setter方法。Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。

② 构造器注入

使用方式:

第一,在类中,不用为属性设置setter方法(但是可以有),但是需要生成该类带参的构造方法。

第二,在配置文件中配置该类的bean,并配置构造器,在配置构造器中用到了节点,该节点有四个属性:

index是索引,指定注入的属性位置,从0开始;
type是指该属性所对应的类型;
ref 是指引用的依赖对象;
value 当注入的不是依赖对象,而是基本数据类型时,就用value;

自动装配
XML方式进行自动装配

大家可以看到用xml装配bean是一件很繁琐的事情,而且我们还要找到对应类型的bean才能装配。

创建应用对象之间协作关系的行为称为装配。也就是说当一个对象的属性是另一个对象时,实例化时,需要为这个对象属性进行实例化,这就是装配。

如果一个对象只通过接口来表明依赖关系,那么这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现进行切换。但是这样会存在一个问题,在传统的依赖注入配置中,我们必须要明确要给属性装配哪一个bean的引用,一旦bean很多,就不好维护了。基于这样的场景,spring使用注解来进行自动装配,解决这个问题。自动装配就是开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成。

在sping框架中共有5种自动装配 :

no:默认的方式是不进行自动装配的,通过手工设置ref属性来进行装配bean。
byName:通过bean的名称进行自动装配,如果一个bean的 property 与另一bean 的name 相同,就进行自动装配。
byType:通过参数的数据类型进行自动装配。
constructor:利用构造函数进行装配,并且构造函数的参数通过byType进行装配。
autodetect:自动探测,如果有构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配。
上面所有方式的applicationContext.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 使用注解前的配置 -->
<context:annotation-config></context:annotation-config><!-- 扫描 -->
<context:component-scan base-package="com.ape.pojo"></context:component-scan><!-- 手动注入 -->
<!-- set注入 -->
<bean id="Student" class="com.ape.pojo.Student"><property name="sid" value="1"></property><property name="sname" value="张三"></property><property name="smoney" value="100.00"></property><property name="cat" ref="cat"></property>
</bean><!-- 构造器注入construct -->
<bean id="Student" class="com.ape.pojo.Student"><constructor-arg name="sid" value="1"></constructor-arg><constructor-arg name="sname" value="张三"></constructor-arg><constructor-arg name="smoney" value="100.00"></constructor-arg><constructor-arg name="cat" ref="cat"></constructor-arg>
</bean><bean id="Student" class="com.ape.pojo.Student"><constructor-arg type="int" value="1"></constructor-arg><constructor-arg type="java.lang.String" value="张三"></constructor-arg><constructor-arg type="double" value="100.00"></constructor-arg><constructor-arg type="com.ape.pojo.Cat" ref="cat"></constructor-arg>
</bean><bean id="Student" class="com.ape.pojo.Student"><constructor-arg index="0" value="1"></constructor-arg><constructor-arg index="1" value="张三"></constructor-arg><constructor-arg index="2" value="100.00"></constructor-arg><constructor-arg index="3" ref="cat"></constructor-arg>
</bean><!-- 自动装配 -->
<!-- xml -->
<bean id="Student" class="com.ape.pojo.Student" autowire="no"><property name="sid" value="1"></property><property name="sname" value="张三"></property><property name="smoney" value="100.00"></property><property name="cat" ref="cat"></property>
</bean><bean id="Student" class="com.ape.pojo.Student" autowire="byName">
</bean><bean id="Student" class="com.ape.pojo.Student" autowire="byType">
</bean><bean id="Student" class="com.ape.pojo.Student" autowire="constructor">
</bean><bean id="Student" class="com.ape.pojo.Student" autowire="default">
</bean>

二、注解@Autowired的自动装配原理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词