Spring 依赖注入(Dependency Injection)

Spring Boot 依赖注入(Dependency Injection, DI) 依赖注入(Dependency Injection, DI)是 Spring 框架的核心特性之一,它通过将对象的依赖关系从代码中分离出来,使得代码更加模块化、可测试和可维护。Spring Boot 作为 Spring 框架的扩展,提供了更加简化的依赖注入方式。本文将详细讲解 Spring Boot 中常用的依赖注入注解。依赖注入是 Spring Boot 中非常重要的特性,通过使用@Autowired@Qualifier@Resource和@Inject等注解,可以简化代码并提高可维护性。 阅读详情

先说结论: 实际开发时尽量选择 构造器注入 而不是 字段注入。 设值注入 和 方法注入 适用的场景较少,较特殊。
原因:
● 官方推荐使用!
● 代码更简洁:配合 Lombok 的 @RequiredArgsConstructor,可以自动生成包含所有 final 字段的构造函数。
● 更安全:构造器注入确保所有必需的依赖在对象创建时就已经注入,避免了在运行时忘记注入某个依赖导致 NullPointerException 的问题。
● 更易于测试:使用构造器注入时,可以直接通过构造器传递依赖进行单元测试,而不需要模拟框架的注入机制。

至于 @Resource它是 Java 的 javax.annotation.Resource 注解,个人建议在Spring项目中就不要用了。

两者区别如下:
@Autowired
● Spring 提供的注解:@Autowired 是 Spring 容器提供的注解,专门用于依赖注入。
● 默认按类型注入:@Autowired 默认按照类型(type)进行注入。
● 可指定按名称注入:可以通过 @Qualifier 注解指定按名称注入。
@Resource
● J2EE 标准注解:@Resource 是 J2EE 标准的一部分,通常用于 EJB 和其他 J2EE 资源的注入。
● 默认按名称注入:@Resource 默认按照名称(name)进行注入,如果找不到匹配的名称,则按类型(type)注入。
● 不需要 @Qualifier:@Resource 可以通过 name 属性指定名称,而不需要额外的 @Qualifier 注解。

一、构造器注入(Constructor Injection)

构造器注入通过类的构造方法来传递依赖。

举个例子:

@RestController
@RequiredArgsConstructor
public class WarningTaskController {
    // 注意使用 final 标记不可变
    private final WarningTaskService taskService;
    // 多个依赖可以
}

二、设值注入(Setter Injection)

设值注入通过 setter 方法来注入依赖。

举个例子:
使用 Spring Security ,默认内存用户认证的信息可以配置spring.security.user.name=customUserName就是通过 Setter 注入。源码如下:

@ConfigurationProperties(prefix = "spring.security")
public class SecurityProperties {
    // 省略一些非必要的代码
	
	private final User user = new User();

	public User getUser() {
		return this.user;
	}


	public static class User {

		private String name = "user";
		private String password = UUID.randomUUID().toString();
		private List<String> roles = new ArrayList<>();

		private boolean passwordGenerated = true;

		public String getName() {
			return this.name;
		}

		public void setName(String name) {
			this.name = name;
		}

		// 省略其他 getter/setter
	}

}

三、字段注入(Field Injection)

字段注入直接通过字段来注入依赖。

举个例子:

@RestController
public class WarningTaskController {

    // 不推荐使用
    // 如果依赖非常多,代码会很臃肿
    @Autowired
    private final WarningTaskService taskService;

}

四、方法注入(Method Injection)

方法注入通过方法参数来注入依赖。

举个例子:

@RestController
public class WarningTaskController {
    private WarningTaskService taskService;

    // 不推荐 如果对象是可变的
    @Autowired
    public void configure(WarningTaskService taskService) {
        this.taskService = taskService;
    }

    // 其他业务逻辑...
}
ORACLE 12C RAC 启动报错,错误代码 ORA-27300,ORA-27301,ORA-27302 非一体机,12.2 无任何补丁,2套X86服务器,1节点集群异常(数据库正常,还有会话),2节点正常工作,负载不高,硬件、空间均未检查到异常,多路径存在掉线的情况,但通过Mulitpath -ll 看又是正常的,2根私有网络,其中一根不同,sysctl中配置的稀疏模式。5、再次加成crs alert ohas等集群日志,以及根据现象和错误再次到后台sr中查找可用信息,发现有一个类似问题,12.2 RAC 无任何补丁,报同样错误,解决方案为重启两套服务器。查询MOS文档以及后台文档,排除上面指出的问题。 阅读详情

相关推荐

实战解析:利用Python requests库高效抓取京东商品评论并构建结构化数据集

本文详细介绍了如何利用Python requests库高效抓取京东商品评论并构建结构化数据集。通过分析京东评论接口、处理反爬机制以及数据解析存储,帮助开发者快速获取电商数据,适用于竞品监控、用户画像构建等商业场景。

weixin_42526415的博客 838

Spring第四篇_依赖注入(Dependency Injection)

4. 依赖注入 Spring中的依赖注入: 依赖注入: Dependency Injection IOC的作用: 降低程序间的依赖耦合(依赖关系) 依赖关系的管理: 以后都交给Spring来维护 在当前类需要用到其它类的对象的时候, 由Spring为我们提供, 我们只需要在配置文件中说明 依赖关系的维护, 就称之为依赖注入 依赖注入: 能注入的数据 有三类: 基本类型和String 其他bea...

weixin_44086832的博客 596

视觉开发板—K210自学笔记(三)--点亮LED

K210点亮LED灯

adamsecond 3412

Spring 依赖注入Dependency Injection

在当前类需要用到其他类的对象,由spring为我们提供,只需要在文件中配置 注意经常变换的数据,不使用注入的方式 能注入的数据:有三类 基本类型和String 其他bean类型(在配置文件中或者注解配置过的bean) 复杂类型/集合类型 注入的方式:有三种 第一种:使用构造函数提供 第二种:使用set方法提供 第三种:使用注解提供(明天的内容) 构造函数注入 使用的标签:constructor-arg 标签出现的位置:bean标签的内部 标签中的属性 type:用于指定要注入的数据的数据类型,该数据类型也是

Claroja 168

CARLA仿真:自定义地图与AI车辆行为编程

CARLA仿真:自定义地图与AI车辆行为编程 ,人工智能,计算机视觉,大模型,AI,本文围绕CARLA仿真平台,介绍了其基础功能与安装方法,详解地图系统,包括预设地图的加载切换及自定义地图的创建、导入与优化。还阐述了AI车辆的创建、属性设置、销毁,以及行为控制,如交通规则遵守、路径规划、复杂行为编程和行为树应用。同时涉及传感器与车辆感知、交通场景构建、自定义地图与AI行为结合应用、高级应用,以及常见问题解决方案和学习资源,为CARLA仿真应用提供全面指导。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 11万+

黑猫带你学eMMC协议第17篇:超详细的eMMC HS200 & HS400讲解

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 本文大约6000字,主要内容有: 1.什么是emmc hs200/hs400? 2.什么是tuning?tuning的过程又是什么? 3.如何设置才能让emmc进入hs200 mode? 4.如何设置才能让emmc进入hs400 mode? 5.emmc关于HS200/HS400内部结构框图对比。 6.部分个人相关经验总结。

黑猫奥利奥的博客 1万+

Spring Dependency Injection - 依赖注入使用技巧

就不知道是怎么注入的了。场景:是一个案例中使用到了 @ConditionalOnProperty 注解,我们也可以自定义一个 Conditional 的实现类,之后把这个实现类配置到需要实例化的对象上面,通过 matches 匹配条件方法的实现,决定是否实例化。场景:模拟创建 createTopic,入参的对象为注入的操作,@Qualifier 注解可以指定要注入哪个名字的对象。用途:当我们为一组接口提供实现类,并需要提供默认的注入的时候,就可以使用 @Primary 注解来限定首选注入项。

优快云_LiMingfly的博客 1084

【Coze搞钱实战】14. 抖音直播间自动回复机器人实战教程:三小时搭建智能客服,互动率提升150%(保姆级无代码指南)

摘要:抖音直播间高频问题重复回复、观众互动不及时是运营痛点。本文针对新手和进阶用户,提供无代码的自动回复机器人搭建方案:新手1小时完成基础配置(Coze+抖音对接),进阶用户通过促销倒计时、粉丝分层、热点借势三大策略提升互动率150%。方案基于某女装直播间实测数据(日UV 5W+),所有工具免费获取,步骤拆解到分钟级,附避坑指南与效果验证(某案例互动率从8%升至20%),读者可直接套用配置模板,无需代码基础即可落地。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2462

spring原生依赖注入Dependency Injection

依赖注入,DI,setter注入,construct注入,P命名,C命名,init延迟加载Bean

m0_61145426的博客 188

基于3D相机的人体穴位识别与标注系统——完整Python实现方案

摘要 本文提出了一种基于3D相机的人体穴位识别与标注系统完整实现方案。系统采用Intel RealSense D435相机实时采集RGB-D数据,结合MediaPipe Pose模型进行人体33个关键骨骼点的三维姿态估计。通过建立穴位与骨骼关键点的映射关系,利用相机内参和深度信息将二维图像坐标转换为三维空间坐标。系统采用模块化设计,包含数据采集层、算法处理层、坐标转换层和可视化层,实现了穴位定位、三维坐标转换和点云可视化功能。关键技术包括:基于骨度折量法的穴位映射算法、深度图像到三维点云的转换方法,以及Op

AI的内部世界的博客 273

prplOS组件流程梳理

本文梳理了prplOS系统中设备信息管理模块(deviceinfo-manager)的工作流程。该模块启动时通过/etc/init.d/deviceinfo-manager调用核心框架amxrt执行,主要功能包括收集设备信息、管理数据模型、初始化子系统等。系统采用ODL文件定义数据模型,通过解析器将配置文件转换为内存中的对象树。流程涉及命令行参数解析、ODL文件加载、后端模块扫描等核心步骤,最终构建出完整的数据模型供上层应用访问。整个架构体现了模块化设计思想,通过动态加载插件实现功能扩展。

四儿家的小祖宗的博客 1276

spring依赖注入(dependency injection)

spring依赖注入包括两个方面:       依赖:指bean对象创建依赖于容器。bean对象的依赖资源       注入:bean对象的依赖资源由容器来设置和装配 Spring的注入有两类: 1、构造器的注入:使用constructor-arg 2、setter注入 要求被注入的属性,必须有set方法,set方法生成的方法名,由se

想念的专栏 797

SAPGUI 与 ADT 的时代分野:在多云架构下,谁还能代表现代 SAP 开发

摘要(149字) SAP开发工具正经历代际更迭:SAPGUI基于专有协议(NI/DIAG)的厚客户端架构难以适配多云环境,而ADT(ABAP Development Tools)通过HTTP(S)协议和Eclipse生态成为ABAP Cloud/RAP开发的唯一入口。关键差异体现在:ADT支持CDS、行为定义等云原生对象建模,天然对齐BTP的零信任网络;集成ATC、Git等DevOps工具链;而SAPGUI无法创建RAP核心对象,在跨平台、自动化方面存在硬限制。官方文档明确将ADT作为Clean Core战

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

spring依赖注入的三种方式(DI:Dependency Injection)

一、什么是依赖注入,为什么使用依赖注入 依赖:一个类使用了另一个类的对象,这个类就依赖于另一个类 依赖注入:将另一个类的对象通过spring特有的方式放到这个类中,供这个类使用,这就是依赖注入 使用场景:使用IOC已经降低了程序中类与类的耦合度,但是一个类中可能使用了另一个类的对象,这时候就需要使用依赖注入,将一个类的对象注入到另一个类中供它使用。 二、spring使用配置文件方式实现...

布先生 1861

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【Spring】依赖注入(Dependency Injection)和控制反转(Inversion of Control)【转】

依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通...

Tuling2020的博客 151

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring框架的依赖注入(Dependency Injection, DI)

在传统的编程中,对象通常自己负责创建和管理它的依赖项。// 直接创建依赖在这种模式下,直接依赖于的具体实现,导致代码耦合性高,难以替换或测试。而在依赖注入模式下,依赖关系由外部容器(如Spring容器)提供,而不是由对象自身创建。@Service@Autowiredpublic UserService(UserRepository userRepository) { // 通过构造函数注入依赖在这里,不再关心的具体实现,而是通过构造函数接收一个实例。Spring容器会自动将合适的实现(如。

2301_80071107的博客 548

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

spring框架——DI( dependency Injection)依赖注入

1.依赖注入的作用 将spring的核心容器中的对象赋值给类的成员变量。 2.依赖注入实现的方法 2.1构造方法方式注入 要定义变量 ,提供构造方法 java代码如下: public class AccountServiceImpl implements AccountService { private String name; public AccountServiceImpl(String name) { this.name = name; } @Over

wdxgj123的博客 212

Spring黑马:依赖注入(Dependency Injection)

文章目录1.依赖注入的3种方式(获取bean对象)1.1 构造函数注入1.2 使用set方法注入1.3 注解注入2. 依赖注入的3类数据(其实就是设定参数值)3. 案例 1.IOC的作用:降低程序之间的耦合(依赖关系) 2.依赖关系的管理:以后都交给spring来维护。 在当前类需要用到其他类的对象,由spring来提供,我们只需要在配置文件中说明依赖关系的维护,称为依赖注入。 3.依赖注入: 能...

JH灰色的博客 653

Spring依赖注入(Dependency Injection)

DI依赖注入(Dependency Injection) 1.1 构造器注入 详情见我的上一篇博客https://blog.csdn.net/weixin_46976101/article/details/109363663 ┗|`O′|┛ 1.2 set方式注入(重点) 依赖注入:Set注入! 依赖:bean对象的创建依赖于容器 注入:bean对象中的所有属性,由容器注入 环境搭建 复杂类型 package com.wangxu.POJO; public class Address {

等我千分就网恋的blog 199

Spring依赖注入(DI,Dependency Injection)

摘要:Spring笔记_04-2021-06-28 1.什么是依赖注入? **官方说明:**https://docs.spring.io/spring-framework/docs/5.2.0.RELEASE/spring-framework-reference/core.html#beans-dependencies 依赖注入: 依赖注入(DI)是一个过程,对象仅通过构造函数参数、工厂方法的参数或在对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义它们的依赖(即与它们一起工作的其他对象) .

Riove的博客 269

Spring_依赖注入(Dependency Injection)

Spring_依赖注入(Dependency Injection) 使用Spring框架后,Spring将会对类间的依赖关系进行管理,而这就叫做依赖注入。 注意:经常变化的数据,并不适合使用依赖注入 一、依赖注入的三种方式: 1)使用构造函数 2)使用setter方法 3)使用注解 一、依赖注入的数据: 1)在配置文件中配置的bean类 2)基本类型和String 3)复杂类型/集合类型 ...

weixin_36957504的博客 261

Spring的核心机制:依赖注入(Dependency Injection)

本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》             依赖注入(Dependency Injection) 是时下的"流行语",也是目前最优秀的解耦方式。使用依赖注入时,J2EE中的各种

虽然我很菜 3066

Spring--依赖注入(Dependency Injection)

1.Spring–依赖注入(Dependency Injection) 依赖注入(Dependency Injection,DI)。 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 1.1 构造器注入 前面的beans.xml一直用的构造器注入 1.2 Set 注入 (重点) 1.2.1 测试pojo类 Address.java package com.tian.pojo; public class Add

天行健 君子以自强不息,地势坤 君子以厚德载物。 1310

Spring Core 之 Dependency Injection(依赖注入)

文章目录一、Dependencies Overview 一、Dependencies Overview A typical enterprise application does not consist of a single object.Even the simplest application has a few objects that work together to present what the end-user sees as a coherent application.Dependen

qq_38515961的博客 1258

【Spring】依赖注入DI--Dependency Injection

1.构造器注入 2.Set方式注入【重点】 依赖注入:Set注入! 依赖:bean对象的创建依赖于容器 注入:bean对象中所有的属性,又容器来注入。 对应官网 【环境搭建】 1.pojo实体类 Address package com.peach.pojo; public class Address { private String address; } Student package com.peach.pojo; import java.util.*; public clas

alovelypeach的博客 376

Spring IoC容器:依赖注入(Dependency Injection)

Spring IoC容器:依赖注入(Dependency Injection)

听海边涛声 966
上一篇: Sql语句解析工具类
下一篇: Java 函数式编程
知楠行易
博客等级 码龄9年 320粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值