Spring Boot Bean 注入的常用方式教程

news2024/9/22 14:12:32

Spring Boot Bean 注入是一种将依赖对象引入到应用程序组件中的机制,它有助于实现松耦合和可测试的代码。这种注入方式允许我们将依赖关系委托给 Spring 容器来管理,从而提高了代码的可维护性和可读性。Spring Boot 提供了多种 Bean 注入方式,包括构造函数注入、Setter 方法注入和字段注入等,以满足不同的需求和偏好。

Bean 注入的优势包括:

  • 降低了代码的耦合度,使得组件更容易重用和测试。
  • 提高了代码的可读性,减少了样板代码。
  • Spring 容器可以负责管理 Bean 的生命周期,包括创建、初始化和销毁。

Spring Boot Bean 注入配置

在 Spring Boot 中,配置 Bean 注入可以通过多种方式完成,最常用的方式是使用注解。以下是一个简单的配置示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyService {
    private final MyRepository repository;

    @Autowired
    public MyService(MyRepository repository) {
        this.repository = repository;
    }

    // ...
}

在上面的示例中,@Autowired注解用于构造函数,以实现构造函数注入。Spring Boot 会自动识别MyRepository类型的 Bean 并将其注入到MyService中。

其它常见注入配置

1、构造函数注入

这是一种常见的方式,通过在类的构造函数上使用@Autowired注解将依赖注入到 Bean 中。例如:

@Service
public class MyService {
    private final MyRepository repository;

    @Autowired
    public MyService(MyRepository repository) {
        this.repository = repository;
    }
}

2、字段注入

你可以使用@Autowired注解直接在字段上注入依赖。这种方式通常用于小型项目或者在测试时注入模拟对象。

@Service
public class MyService {
    @Autowired
    private MyRepository repository;
}

3、Setter 方法注入

通过在 Setter 方法上使用@Autowired注解来进行注入。

@Service
public class MyService {
    private MyRepository repository;

    @Autowired
    public void setRepository(MyRepository repository) {
        this.repository = repository;
    }
}

4、使用@Qualifier注解

如果你有多个实现了同一接口的 Bean,可以使用@Qualifier注解指定要注入的 Bean 的名称或者 ID。

@Service
public class MyService {
    private final MyRepository repository;

    @Autowired
    public MyService(@Qualifier("myRepositoryImpl") MyRepository repository) {
        this.repository = repository;
    }
}

5、构造函数注入的替代方式

除了使用@Autowired,你也可以使用@Inject注解来完成构造函数注入。

@Service
public class MyService {
    private final MyRepository repository;

    @Inject
    public MyService(MyRepository repository) {
        this.repository = repository;
    }
}

以上是一些常见的 Spring Boot Bean 注入方式,你可以根据自己的需求和项目的规模选择合适的方式。不过,最常用的方式是构造函数注入,因为它具有更好的可维护性和不变性。

实践案例

以下是一个简单的示例,演示了如何在 Spring Boot 项目中使用 Bean 注入。假设我们有一个简单的 REST API,它允许用户创建和获取书籍信息。

首先,我们需要创建一个BookService类,它依赖于BookRepository

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookService {
    private final BookRepository bookRepository;

    @Autowired
    public BookService(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    // ...
}

然后,我们创建一个BookController,它依赖于BookService

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/books")
public class BookController {
    private final BookService bookService;

    @Autowired
    public BookController(BookService bookService) {
        this.bookService = bookService;
    }

    // ...
}

通过以上配置,Spring Boot 会自动注入BookRepositoryBookService,并注入BookServiceBookController,从而实现了依赖关系的管理。

使用 Apifox 测试和管理接口

Apifox 是一个比 Postman 更强大的接口测试工具,Apifox = Postman + Swagger + Mock + JMeter,Apifox 支持调试 http(s)、WebSocket、Socket、gRPC、Dubbo 等协议的接口,并且集成了 IDEA 插件。在开发完接口后,可以通过 Apifox 的 IDEA 插件一键自动生成接口文档,多端同步,非常方便测试和维护。

注意事项

在使用 Bean 注入时,需要注意以下事项:

  • 确保目标 Bean 已经被正确配置并且可用。否则,会抛出依赖注入失败的异常。
  • 避免循环依赖。Spring Boot 通常能够处理简单的循环依赖,但复杂的循环依赖可能导致应用程序启动失败。
  • 谨慎使用字段注入,因为它可能导致不易测试的代码。构造函数或 Setter 方法注入通常更容易测试。

知识扩展:

  • Spring Boot Bean 加载顺序的用法详解
  • Spring Boot AOP 如何使用?

参考链接:

  • Spring Boot 官方文档:Spring Boot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1080195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt判断当前日期的当月的最后一天是几号

1、拖个dateTimeEdit在界面上,同时来判断输入的时间的最后一天的日期是什么? int year,month;int monthArr[12]{31,28,31,30,31,30,31,31,30,31,30,31};QDateTime time ui->dateTimeEdit->dateTime();year time.toString("yyyy").toIn…

C++入门介绍

1.C入门知识 以下是一些 C 入门知识: C 是一种面向对象的编程语言,它具有高效、灵活、可移植性好等特点 C 中的基本数据类型包括整型、浮点型、字符型等 C 中的控制语句包括条件语句(if、else)、循环语句(for、while、…

飞凌嵌入式成为“龙芯生态伙伴计划”认证级企业!

近日,飞凌嵌入式正式成为“龙芯生态伙伴计划”认证企业,标志着飞凌嵌入式与龙芯中科的紧密型战略合作伙伴关系正式建立! “龙芯生态伙伴计划”由龙芯中科主导发起,旨在推动龙芯生态企业基于龙芯平台开发产品,丰富龙芯…

MyBatisPlus属性自动填充和乐观锁插件+查询删除操作+整合SpringBoot出现问题解决

属性字段自动填充 一、实体类和数据表添加两个字段(属性) 表:create_tiem/update_time 实体类:createTime/updateTime 二、实体类中属性进行注解添加 TableField(fillFieldFill.INSERT) private Date createTime;TableField(f…

DC2DC电源设计注意事项--1,Feedback

电源采集图如下图 Feedback 采集电压点应该在靠近负载侧。这样可以减少大电流导线导致的电压差,真实反应输出电压值 FB_1P21采集电路靠近芯片侧, 2.1,采集分压电路上侧为Vout Vnoise, 那么一分压就噪声就小了。假如采集电路远离芯片侧&…

简洁多媒体影音库 Emby 中文最新 for mac

Emby是一款用于媒体服务器和媒体中心的软件平台。它允许用户将个人的音乐、电影、电视节目、照片和其他媒体文件组织和管理起来,并通过各种设备进行访问和流媒体播放。 以下是Emby可能提供的一些主要功能和特点: 媒体管理和组织:Emby允许用户…

蒙特卡洛方法的简单应用

蒙特卡洛方法的简单应用 圆周率估算 eastimate pi python version 3.11 RNG:np.random.random import os figure_save_path "file_fig" import warnings warnings.filterwarnings("error") import numpy as np np.random.seed(0) import matplotlib.pyp…

温度在线检测技术在电力电缆线路的应用

在电力电缆的日常运行检测中,针对电缆温度的状况,所采用的电力温度在线检测技术也得到了大范围的普及。电网系统中,其单位时间内可输送的电力能源受到其温度的变化影响。因此,采用更有效的方式实时检测电缆系统运行温度&#xff0…

虾皮商品链接获取虾皮商品详情数据(用 Python实现虾皮商品信息抓取)

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取虾皮网站上的商品页面。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是,虾皮网站…

miRNA测序数据生信分析——第三讲,已知物种的生信分析实例

miRNA测序数据生信分析——第三讲,已知物种的生信分析实例 miRNA测序数据生信分析——第三讲,已知物种的生信分析实例1. 下载测序数据2. 原始数据质控——软件fastqc3. 注释tRNA和rRNA,使用Rfam数据库——软件blast,Rfam_statisti…

MySQL数据库技术笔记(3)

概述 学习MySQL数据库技术其实只需要安装mysql服务器就可以使用了。只不过对于初学者来说直接操作dos窗口方式比较麻烦,命令不熟悉,导致经常写错。在真实的开发当中直接操作dos窗口效率比较慢,企业中也会经常使用一些mysql数据库支持的可视化…

【VR开发】【Unity】0-课程简介和概述

【说明】 这是我录制的一套VR基础开发课程的文字版本,更加便于快速参考。 应大家在后台所提的需求,从今天开始,我计划带给大家一套完整达40课时的VR开发基础课程。 在开始学习前需要注意如下几点: 本教程基于Unity2022.2.1f1版…

【Python 零基础入门】基础语法

【Python 零基础入门】第四课 基础语法 【Python 零基础入门】第四课 基础语法怎么写 Python 代码缩进注释Python 标识符规则Python关键字代码行和块导包 字符串操作字符串连接字符串的其他常用方法 循环for 循环while 循环 判断语句比较运算符逻辑运算符if 判断三元表达式brea…

【已解决】ORA-01722: invalid number

文章目录 ORA-01722: invalid number问题思路解决 ORA-01722: invalid number 问题 invalid number 字符与数值不匹配 oracle 截取 ‘1-2’ 只需要’-前面的 思路 一、问题提示 执行Oracle的sql语句提示【ORA-01722: invalid number】无效数字错误。 二、问题分析 2.1、类…

共模电感在EMC电路里有哪些原理及作用?|深圳比创达EMC

共模电感在EMC电路里有哪些原理及作用?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! 一、共模电感在EMC电路里的作用 EMC电路设计中共模干扰问题居多,所以共模电感很常见。共模电感是可以抑制共模干…

亚马逊“黑五网一”大促开启!如何抓住流量密码实现爆单?

亚马逊“黑五网一”大促从起10月30日正式开始,对比往年活动周期增加至11天,作为海外电商年度盛宴,将覆盖Choice day年度盛典、双十一、黑色星期五三大营销节点,备受全民瞩目。 去年,仅是美国消费者在“黑五”期间消费…

golang使用energy开发GUI桌面程序,CEF,LCL

1、概述 仓库:https://github.com/energye/energy 文档:https://energy.yanghy.cn/ Energy 是 Go 基于 CEF(Chromium Embedded Framework) 开发的框架,内嵌 CEF 二进制 使用 Go 和 Web 端技术 ( HTML CSS JavaScript ) 构建支持Windows, …

配电室六氟化硫气体泄漏报警装置安装位置

六氟化硫气体泄漏报警装置安装位置产品的设计、检验、制造均遵循GB16808-2008《可燃气体报警控制器》和GB12358-2006《作业场所环境气体检测报警仪通用技术要求》严格设计。是经过高速CPU数据处理,通过LCD显示出探测器的浓度、状态并输出相应的控制信号。报警控制器…

什么是 API 接口?给大家举例说明

Api 接口也就是所谓的应用程序接口,api 接口的全称是 Application Program Interface,通过 API 接口可以实现计算机软件之间的相互通信,开发人员可以通过 API 接口程序开发应用程序,可以减少编写无用程序,减轻编程任务…

KdMapper扩展实现之SOKNO S.R.L(speedfan.sys)

1.背景 KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称spee…