Spring的构造注入、setter注入以及自动装配

6种 Spring 依赖注入方式 Spring框架提供了多种依赖注入方式,包括构造器注入、Setter方法注入、接口注入、自动装配、注解注入和Java配置等。不同的注入方式适用于不同的场景,开发人员可以根据具体需求选择合适的方式。依赖注入使得应用程序的组件之间解耦合,提高了代码的可测试性、可维护性和可扩展性。通过灵活使用Spring框架提供的依赖注入方式,可以更加方便地管理和维护应用程序的依赖关系,从而提升开发效率和代码质量。在实际开发中,根据具体的需求和项目特点,我们可以组合使用不同的依赖注入方式。 阅读详情

1、小案例

这里我们定义两个类方法,分别是MathDemo和EnglishDemo,分别执行学习数学和学习英语的方法;、

package com.test2;

public class MathDemo {
    public void StudyMath(){
        System.out.println("学习数学。。。。");
    }
}
package com.test2;

public class EnglishDemo {
    public void StudyEnglish(){
        System.out.println("学习英语。。。。");
    }
}

我们再定义一个学习类,包括MathDemo和EnglishDemo类的两个属性,和一个学习方法StudyDemo:

package com.test2;

public class StudyDemo {
    private MathDemo mathDemo;
    private EnglishDemo englishDemo;
    public StudyDemo(){

    }
    public StudyDemo(MathDemo mathDemo,EnglishDemo englishDemo){
        this.mathDemo=mathDemo;
        this.englishDemo=englishDemo;
    }
//学习方法
    public void study(){
        mathDemo.StudyMath();
        englishDemo.StudyEnglish();
    }
}

这是我们配置的study.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="math" class="com.test2.MathDemo"/>

    <bean id="english" class="com.test2.EnglishDemo"/>
    <!--构造注入MathDemo和StudyDemo-->
    <bean id="StudyDemo" class="com.test2.StudyDemo">
        <constructor-arg ref="math"/>
        <constructor-arg ref="english"/>
    </bean>

</beans>

我们再新建测试类StudyTest:

package com.test2;

import com.test1.IntrduceDemo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestStudy {
    public static void main(String[] args) {
        //创建Spring上下文(加载study.xml)
        ApplicationContext acx= new ClassPathXmlApplicationContext("study.xml");
        //获取StudyDemo实例并赋值
        StudyDemo sd=acx.getBean("StudyDemo",StudyDemo.class);
        //调用方法
        sd.study();
        //销毁实例对象
        ((ClassPathXmlApplicationContext) acx).close();

    }
}

运行结果:


2、注入方式

1)构造注入
上例中我们应用的是构造注入,这种注入方式需要在被注入的Javabean中重载一个有参的构造方法:

package com.test2;

public class StudyDemo {
          …
          …
    public StudyDemo(MathDemo mathDemo,EnglishDemo englishDemo){
        this.mathDemo=mathDemo;
        this.englishDemo=englishDemo;
    }
          ….
          …
}
在study.xml中配置:

<bean id="math" class="com.test2.MathDemo"/>

<bean id="english" class="com.test2.EnglishDemo"/>
<bean id="StudyDemo" class="com.test2.StudyDemo">
<!--构造注入MathDemo和StudyDemo-->
    <constructor-arg ref="math"/>
    <constructor-arg ref="english"/>
</bean>
2)Setter方法注入(属性注入)

       set方法的注入需要在被注入的javaBean中有setter方法

package com.test2;

public class StudyDemo {
    private MathDemo mathDemo;
    private EnglishDemo englishDemo;
  
    public void setMathDemo(MathDemo mathDemo) {
        this.mathDemo = mathDemo;
    }

    public void setEnglishDemo(EnglishDemo englishDemo) {
        this.englishDemo = englishDemo;
    }

    public void study(){
        mathDemo.StudyMath();
        englishDemo.StudyEnglish();
    }
}
在study.xml中配置:
<bean id="math" class="com.test2.MathDemo"/>

<bean id="english" class="com.test2.EnglishDemo"/>
<!--属性注入MathDemo和StudyDemo-->
<bean id="StudyDemo" class="com.test2.StudyDemo">
    <property name="mathDemo" ref="math"/>
    <property name="englishDemo" ref="english"/>
</bean>

*注以上两种注入方式是最常用的,还有工厂注入的方法,感兴趣可自行了解!

3、自动装配

set注入和构造注入有时在做配置时比较麻烦。所以框架为了提高开发效率,提供自动装配功能,简化配置。Spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<bean>标签的autowire属性

   自动装配autowire属性有6个值可选,分别代表不同的含义。

no

不支持自动装配功能

byName

从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找<bean>标签的id属性值。如果有相同的,那么获取这个对象,实现关联。

 

 整个Spring环境:表示所有的spring配置文件中查找,那么id不能有重复的。

byType

从Spring环境中获取目标对象时,目标对象中的属性会根据类型在整个spring环境中查找<bean>标签的class属性值。如果有相同的,那么获取这个对象,实现关联。

constructor

使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。

autodetect

自动选择:如果对象没有无参数的构造方法,那么自动选择constructor的自动装配方式进行构造注入。如果对象含有无参数的构造方法,那么自动选择byType的自动装配方式进行setter注入。

default

表示默认采用上一级标签的自动装配的取值。如果存在多个配置文件的话,那么每一个配置文件的自动装配方式都是独立的。

我们这里用constructor举例:StudyDemo如下

package com.test2;

public class StudyDemo {
    private MathDemo mathDemo;
    private EnglishDemo englishDemo;
    public StudyDemo(){
        
    }
    public StudyDemo(MathDemo mathDemo,EnglishDemo englishDemo){
        this.mathDemo=mathDemo;
        this.englishDemo=englishDemo;
    }
    
    public void study(){
        mathDemo.StudyMath();
        englishDemo.StudyEnglish();
    }
}
配置文件如下:

<bean id="math" class="com.test2.MathDemo"/>

<bean id="english" class="com.test2.EnglishDemo"/>
<!--构造注入自动装配MathDemo和StudyDemo-->
<bean id="StudyDemo" class="com.test2.StudyDemo" autowire="constructor">

</bean>












深入解析 Spring 依赖注入:原理与实践 依赖注入是一个过程,通过构造函数、工厂方法参数或对象属性,将依赖对象注入到目标对象中。Spring 容器在创建 Bean 时负责完成这一过程,与传统的通过类直接构造或服务定位器模式获取依赖的方式形成对比(即控制反转,IoC)。代码简洁:对象无需主动查找依赖,也无需关心依赖的来源或具体实现。高解耦性:依赖关系由容器管理,组件间耦合度降低。易测试性:通过接口或抽象类注入依赖,便于在单元测试中使用模拟对象。谁依赖谁?应用程序依赖 IoC 容器。为什么需要依赖? 阅读详情

相关推荐

Spring中的依赖注入、setter与构造器注入、自动装配与集合注入详细描述及使用(XML版中篇)

💖异常处理与解决方案详解上篇💖异常处理与解决方案详解下篇💖Math类与System类的常用方法使用💖JavaEE中的静态方法定义、方法重载要求、return作用详解💖List接口的常用方法,精华总结💖JavaEE里面的所有内部类详细介绍与使用💖ArrayList集合中的常用成员方法💖JavaEE中的Stream流的常用方法💖JavaEE中的Stream流知识点使用,精华总结,一文直接上手 ⭐代码演示 ⭐代码演示 ⭐代码演示 ⭐代码演示 ⭐type属性参数适.........

KJ.JK 3万+

Spring的两种依赖注入方式:setter方法注入与构造方法注入 以及两种方式的区别!

spring的两种依赖注入方式:setter注入与构造方法注入,这两种方法的不同主要就是在xml文件下对应使用property和constructor-arg属性, 例如:property属性:<property name="id" value="123"></property>(其中name的值为原类中的属性名)constructor-arg属性:<constructor-arg index="0

sdx1237的博客 2万+

cadence Virtuoso ADE原理图库中的VCVS(压控电压源)使用

Symbol: vcvs (Voltage Controlled Voltage Source) Vop−Von=egain⋅(Vip−Vin)V_{op}-V_{on}=egain\cdot(V_{ip}-V_{in})Vop​−Von​=egain⋅(Vip​−Vin​) 所以可以得出 ⟹Vop=egain⋅(Vip−Vin)+Von\Longrightarrow V_{op}=egain\cdot(V_{ip}-V_{in})+V_{on}⟹Vop​=egain⋅(Vip​−Vin​)+Von​ 使

大学生视野 2万+

Spring注解@Resource和@Autowired区别

(1)@Autowired @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。 @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用

不知名的博客 468

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5561

保姆级教程:从Salmon输出到DESeq2,搞定RNA-seq表达矩阵标准化与下游分析准备

本文提供从Salmon输出到DESeq2标准化的RNA-seq数据分析全流程指南,详细解析表达矩阵构建、标准化方法选择及下游分析准备。重点介绍如何将Salmon定量结果转换为DESeq2兼容格式,包括TPM与原始计数的处理技巧,以及常见问题排查方法,帮助研究人员高效完成RNA-seq数据分析。

weixin_42699679的博客 304

3.依赖注入setter注入和构造器注入

其实就是通过我们当前为属性为成员变量提前设置好的一些方式,然后通过这些方式,比如说set,比如说构造器,通过这个方式,为我们的成员变量赋值的一个过程 ioc中配置的bean : 测试类: 构造器注入 ioc中配置的bean : 测试类: 实体类 会发现我们使用构造器注入出现的结果不正确 所以需要我们去ioc容器中配置测试类: 正确的结果:

m0_56379670的博客 476

Claude Code + 自定义模型体验

AI 编程工具的发展突飞猛进:Cursor 横空出世,推出了“Agent 模式”;新竞争者如 Windsurf 也纷纷加入战局。几乎所有产品都开始转向“代理式(agentic)”开发模式——不再依赖单次 LLM 响应进行补全,而是让大模型在一个循环中调用各种工具,来完成更复杂的任务:分析代码库上下文、读取网页与文档、编译程序、运行测试、修复失败构建或测试、不断迭代等。

西京刀客 5791

SpringIOC实践作业1——Setter注入&构造器注入

一、实验目的 1、掌握Spring项目工程搭建 2、掌握Spring核心配置文件基本配置流程 3、掌握两种注入方式 二、实验任务 1、创建项目并实现Spring两种注入方式(setter注入and构造器注入),并分析两者区别。 这两种方法的不同主要就是在 xml 文件下对应使用 property 和 constructor-arg setter注入:Spring调用一个对象的 set 方法注入前,而且这个对象必须先被实例化 构造器注入:Spring会在调用构造函数前,实例化好构造函数需要的

米莱虾 1014

matlab 图像合成_用MATLAB做图像合成加雾的处理

众所周知,现在有很多算法来对图像进行去雾处理。但反之,对图像增加雾的代码却少之又少,本代码就是基于Matlab实现了对图像的加雾处理。该方法可用做雾天图像的合成数据集。代码公开如下:clear;clc; % close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%i...

weixin_35719260的博客 2060

DeepSeek + 微信:手把手教你把 AI 接入个人微信,秒变“高情商”聊天助手(防封指南)

将 DeepSeek 接入微信,本质上是给你的微信装了一个**“最强外挂”**。它不仅能帮你回消息,还能帮你写周报、查资料、甚至陪聊解闷。工具是服务于人的,不要让 AI 完全替代了你的真情实感。毕竟,真正的高情商,是屏幕背后那个在乎对方的你。先申请一个小号,按照步骤跑通流程。然后试着调整 Prompt,训练一个属于你自己的“嘴替”吧!

BUG猿的博客 957

Spring中构造注入详解

Spring中构造注入详解

x2656271356的博客 2523

单细胞转录组数据分析中的基因ID注释转换问题:如何解决才能注释所有的UMIcount数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1126

spring学习(spring-DI(setter注入、构造器注入、自动装配方式))

本篇博客的内容:spring容器(DI)依赖注入的几种实现方式。spring容器使用setter注入方式、构造器注入方式、自动装配方式实现(DI)依赖注入(基本介绍与详细操作步骤)......

岁岁岁平安的博客 1608

Open3D (C++) 点云边界提取【2025最新版】

Compute the boundary points of a point cloud.The implementation is inspired by the PCL implementation. Reference:https://pointclouds.org/documentation/classpcl_1_1_boundary_estimation.html

点云侠的博客 871

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring:依赖注入的方式(setter注入、构造器注入、自动装配、集合注入)

依赖注入的方式有setter注入、构造器注入、自动装配、集合注入

坚持不懈的大白的博客 1702

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Spring5】依赖注入DI常用的三种方法:构造注入、Setter注入、自动装配

Spring的构造注入、Setter注入以及自动装配

The Gao的博客 524

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Spring】依赖注入方式(附代码理解使用)——setter与构造器注入;依赖自动装配;使用p命名空间注入属性值;注入数组集合类型

【依赖注入描述了容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串?①引用类型、②简单类型(基本数据类型与String)】一个HelloWorld类中写一个String类型对象,提供可访问的。在配置文件中使用property标签注入ref属性引用类型对象。【向一个类中传递数据的方式?①普通方法、②构造方法】一个String类型、一个int类型,并提供可访问的。在bean中定义引用类型属性并提供可访问的。在bean中定义引用类型属性并提供可访问的。

m0_70083523的博客 908

java 依赖注入 静态,Spring 依赖注入(DI)详解 [Spring][依赖注入的 6 种实现方式][setter注入][构造器注入][注解注入][自动装配注入][静态工厂注入][实例工厂注入...

Spring 依赖注入(DI)详解 [Spring][依赖注入的 6 种实现方式][setter注入][构造器注入][注解注入][自动装配注入][静态工厂注入][实例工厂注入],您的“关注”和“点赞”,是信任,是认可,是支持,是动力......如意见相佐,可留言。本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。目录1 依赖注入概述2 依赖注入的多种方式(Bean 的装配方式)2.1 ...

weixin_39890452的博客 442

Spring 3.0 学习-Spring Bean、setter注入、构造注入、自动装配、注解注入、扫描bean、Spring bean作用域、循环注入问题

文章大纲 在xml中声明bean和注入bean (setter注入,构造器注入) 在xml中声明bean和自动装配bean(byName、byType、constructor、autodetect) 注解注入Bean(@Autowired、@Qualifier、@Resource、@Inject) 自动扫描bean(<context:annotation-scan/>,@...

༺ bestcxx的专栏 ༻ 7251

Spring 依赖注入(DI)详解 [Spring][依赖注入的 6 种实现方式][setter注入][构造器注入][注解注入][自动装配注入][静态工厂注入][实例工厂注入]

依赖注入,英文叫做 `Dependency Injection`,简称 `DI`。 DI 和 IoC ([《Spring IoC 容器详解》](https://blog.youkuaiyun.com/manongajie/article/details/105943336))含义相同,它们是从两个角度描述的同一个概念、做同一件事情。

码农阿杰的博客 5572

SSM-Spring-day1 Spring相关观念(系统框架、IOC、Bean、DI)(bean基础配置、实例化、构造方法、setter、静态工厂、生命周期、构造器、setter注入、自动装配、)

在这一节,主要通过以下两个点来了解下Spring:官网:https://spring.io,从官网我们可以大概了解到:Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能。Spring已形成了完整的生态圈,也就是说我们可以完全使用Spring技术完成整个项目的构建、设计与开发。Spring有若干个项目,可以根据需要自行选择,把这些个项目组合起来,起了一个名称叫全家桶,如下图所示 说明:图中的图标都代表什么含义,可以进入网站进行对比查看。这些技术并不是所有

shyboyandgirl的博客 184

Spring 依赖注入 总结

setter 注入 与 构造器注入 欢迎大家讨论

Wdc_12的博客 747

依赖注入方式 | setter 注入、构造器注入、依赖自动装配、集合注入

依赖注入描述了在容器中建立 bean 和 bean 之间依赖关系的过程,如果 bean 运行需要的数字或者字符串呢?IoC容器根据 bean 所依赖的 资源 在容器中自动查找并注入到 bean 中的过程称为自动装配。思考:向一个类中传递数据的方式有几种?简单类型(基本数据类型与String)配置中使用 bean 标签。普通方法(set 方法)

Suburbia的博客 1216

【Spring DI】深入解析依赖注入 DI:搭配类注解通过 @Autowired 注解完成属性注入、构造方法注入、Setter 注入方法和三种注入方法的优缺点分析

【Spring DI】深入解析依赖注入 DI:搭配类注解通过 @Autowired 注解完成属性注入、构造方法注入、Setter 注入方法和三种注入方法的优缺点分析

OuO-1 的博客 1170
上一篇: idea中Spring项目创建以及实现一个小的IoC案例
下一篇: SpringIoC之集合注入与空值注入
madi_Goly
博客等级 码龄16年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值