当前位置: 首页 > news >正文

在 Spring Boot 中使用 `@Autowired` 和 `@Bean` 注解

文章目录

      • 在 Spring Boot 中使用 `@Autowired` 和 `@Bean` 注解
        • 示例背景
      • 1. 定义 Student 类
      • 2. 配置类:初始化 Bean
      • 3. 测试类:使用 `@Autowired` 注解自动注入 Bean
      • 4. Spring Boot 的自动装配
      • 5. 总结


在 Spring Boot 中使用 @Autowired@Bean 注解

在 Spring Boot 中,依赖注入(Dependency Injection,简称 DI)是通过 @Autowired 注解来实现的,能够有效地简化对象之间的依赖关系。同时,使用 @Bean 注解可以帮助我们在配置类中显式地定义和初始化 Bean。本文将通过一个具体示例,演示如何在 Spring Boot 中使用 @Autowired@Bean 来管理 Bean。

示例背景

假设我们有一个 Student 类,并希望通过配置类 TestConfig 来初始化 Student 对象,之后在测试类中通过 @Autowired 注解将其自动注入并使用。

1. 定义 Student 类

首先,我们定义一个简单的 Student 类,使用 @Data 注解来生成常见的 Getter、Setter、toString 等方法。

import lombok.Data;@Data
public class Student {private String name;
}

在上面的 Student 类中,@Data 注解来自 Lombok,它会自动为我们生成类的所有 Getter、Setter 和 toString 等方法。这样,我们就不需要手动编写这些常见的代码,使得代码更加简洁。

2. 配置类:初始化 Bean

接下来,我们需要创建一个配置类 TestConfig,其中定义一个 @Bean 注解的方法来初始化 Student 对象。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class TestConfig {@Beanpublic Student studentInit() {Student student = new Student();student.setName("初始化");return student;}
}
  • @Configuration 注解表示该类是一个配置类,Spring 会扫描该类并根据其中的 Bean 定义来初始化 Bean。
  • @Bean 注解用于告诉 Spring 容器:studentInit() 方法返回的对象(在这里是 Student)应该作为一个 Bean 进行管理。这样,Student 对象就会成为 Spring 容器中的一个管理对象。

在这个配置类中,我们显式地初始化了一个 Student 对象,并设置了它的 name 属性为 "初始化"

3. 测试类:使用 @Autowired 注解自动注入 Bean

在测试类中,我们将通过 @Autowired 注解将 Student 对象自动注入,并输出 Student 的名字。

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class StudentTest {@Autowiredprivate Student student;@Testvoid contextLoads13() {System.out.println(student.getName()); // 输出:初始化}
}
  • @SpringBootTest 注解表示这是一个 Spring Boot 测试类,它会启动 Spring 容器来进行集成测试。
  • @Autowired 注解自动注入 Student Bean。Spring 会自动找到符合类型的 Student Bean 并注入到该字段中。
  • 在测试方法 contextLoads13() 中,调用 student.getName() 输出 Student 对象的 name 属性值,应该输出 "初始化",这与我们在 TestConfig 中定义的值一致。

4. Spring Boot 的自动装配

  • 在这个示例中,我们看到通过 @Autowired 注解,Spring 容器会根据 Student 类型自动为我们注入合适的 Bean。无需手动配置或创建实例。
  • 这种自动注入机制是 Spring Framework 中非常强大的特性,可以极大地简化类与类之间的依赖管理。

5. 总结

通过上述示例,我们学到了以下几点:

  • @Bean 注解:通过该注解,我们可以在配置类中显式地定义 Bean,使得对象被 Spring 容器管理。
  • @Autowired 注解:通过该注解,Spring 会自动根据类型将 Bean 注入到需要依赖的地方。
  • @Data 注解:简化了 Student 类的代码,不必手动编写 Getter、Setter 等方法。

在实际开发中,Spring 的依赖注入(DI)功能使得类之间的耦合度大大降低,提高了代码的可维护性和扩展性。通过灵活使用 @Autowired@Bean 注解,可以有效地管理和共享对象。

相关文章:

在 Spring Boot 中使用 `@Autowired` 和 `@Bean` 注解

文章目录 在 Spring Boot 中使用 Autowired 和 Bean 注解示例背景 1. 定义 Student 类2. 配置类:初始化 Bean3. 测试类:使用 Autowired 注解自动注入 Bean4. Spring Boot 的自动装配5. 总结 在 Spring Boot 中使用 Autowired 和 Bean 注解 在 Spring Bo…...

Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好?

Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好? 随着大语言模型(LLM)在实际应用中的普及,许多开发者开始寻求能够帮助他们更高效地开发基于语言模型的应用框架。在众多框架中,La…...

Java 中的内存泄漏问题及解决方案

在 Java 中,内存泄漏(Memory Leak)是指在程序运行过程中,某些对象已经不再使用,但由于引用仍然存在,这些对象无法被垃圾回收器回收,从而导致内存无法释放,最终可能导致系统性能下降甚…...

VS Code 如何搭建C/C++开发环境

目录 1.VS Code是什么 2. VS Code的下载和安装 2.1 下载和安装 2.2.1 下载 2.2.2 安装 2.2 环境的介绍 2.3 安装中文插件 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 3.1.1 下载 3.1.2 配置 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编写…...

【Linux C/C++开发】Linux系统轻量级的队列缓存mqueue

前言 开发设计时,通常会对业务流程进行模块化,有些流程之间,不要求同步,但又需要传递信息时,如果存储到数据库,效率降低很多,如果是存放在内存是最好的。此时可以选择系统的IPC(进程…...

排查生产sql查询缓慢

生产投产检验,发现查询客户明细的接口数据响应需要5秒以上,通过接口可以查询到详细的后端代码 1. 先排查后端的代码实现,并未出现复杂逻辑,那么就应该是sql的问题 2. 通过explain对sql进行解析,发现sql没有走索引 3.…...

idea从远程gitee拉取项目

文章目录 从gitee上面拿到项目地址填写远程地址,并且设置项目保存位置拉取成功 从gitee上面拿到项目地址 填写远程地址,并且设置项目保存位置 拉取成功...

【UCB CS 61B SP24】Lecture 5 - Lists 3: DLLists and Arrays学习笔记

本文内容为构建双向循环链表、使用 Java 的泛型将其优化为通用类型的链表以及数组的基本语法介绍。 1. 双向链表 回顾上一节课写的代码,当执行 addLast() 与 getLast() 方法时需要遍历链表,效率不高,因此可以添加一个指向链表末尾的索引&am…...

软件测试与软件开发之间的关系

软件测试与软件开发的关系 软件测试(Software Testing)与软件开发(Software Development)是软件工程中的两个核心环节,它们相辅相成,确保软件的质量和功能满足需求。以下是两者之间的关系解析:…...

QT 建立一片区域某种颜色

绘制一个位于(50, 50)的200x200的红色矩形 #include "widget.h" #include "ui_widget.h" #include <QPainter>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);update(); }Widget::~Widget() {delete…...

LeetCode--23. 合并 K 个升序链表【堆和分治】

23. 合并 K 个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 正文 这道题有多种解决方案 堆 比较容易&#xff0c;又比较直观的就是堆排序&#xff0c;将每个节点加入最小根堆中&…...

tp6上传文件大小超过了最大值+验证文件上传大小和格式函数

问题&#xff1a; 最近用tp6的文件上传方法上传文件时报文件过大错误。如下所示&#xff1a; $file $this->request->file(file);{"code": 1,"msg": "上传文件大小超过了最大值&#xff01;","data": {"code": 1,&q…...

解决 Mac 只显示文件大小,不显示目录大小

前言 在使用 mac 的时候总是只显示文件的大小&#xff0c;不显示文件夹的大小&#xff0c;为了解决问题可以开启“计算文件夹”。 步骤 1.进入访达 2.工具栏点击“显示”选项&#xff0c;点击 “查看显示选项” 3.勾选 显示“资源库"文件夹 和 计算所有大小 或者点击…...

分布式大语言模型服务引擎vLLM论文解读

论文地址&#xff1a;Efficient Memory Management for Large Language Model Serving with PagedAttention 摘要 大语言模型&#xff08;LLMs&#xff09;的高吞吐量服务需要一次对足够多的请求进行批处理。然而&#xff0c;现有系统面临困境&#xff0c;因为每个请求的键值…...

快速入门——Vue框架快速上手

学习自哔哩哔哩上的“刘老师教编程”&#xff0c;具体学习的网站为&#xff1a;8.Vue框架快速上手_哔哩哔哩_bilibili&#xff0c;以下是看课后做的笔记&#xff0c;仅供参考。 第一节&#xff1a;前端环境准备 编码工具VSCode【www.code.visualstudio.com】/WebStorm也可&am…...

机器学习,我们主要学习什么?

机器学习的发展历程 机器学习的发展历程&#xff0c;大致分为以下几个阶段&#xff1a; 1. 起源与早期探索&#xff08;20世纪40年代-60年代&#xff09; 1949年&#xff1a;Hebb提出了基于神经心理学的学习机制&#xff0c;开启了机器学习的先河1950年代&#xff1a;机器学习的…...

安卓burp抓包,bypass ssl pinning

好久好久没有发东西了。主要是懒。。。 这几天在搞apk渗透&#xff0c;遇到了burp无法抓包问题&#xff0c;觉得可以写下来。 问题描述 1. 一台安卓手机&#xff0c;装了面具&#xff0c;可以拿到root 2. 电脑上有burp&#xff0c;设置代理 3.手机和电脑连同一个网段&…...

【如何基于Debian构建Kali Linux】

如何基于Debian构建Kali Linux 修改apt源获取Kali的apt密钥更新并安装Kali Linux软件包添加非root用户 在Linux系统的应用领域中&#xff0c;Kali Linux因其在渗透测试、安全审计等方面的出色表现而备受关注。Kali Linux是一个基于Debian的Linux发行版。接下来&#xff0c;将介…...

Hopper架构 GEMM教程

一 使用 1.1 makefile compile:nvcc -arch=sm_90a -lcuda -lcublas -std=c++17 matmul_h100_optimal.cu -o testrun:./test加入-lcublas,不然会有函数无法被识别 二 代码分析 2.1 kernel外参数分析 2.1.1 基本参数 constexpr int BM = 64*2;constexpr int BN = 256;cons…...

CV -- 基于GPU版CUDA环境+Pycharm YOLOv8 目标检测

目录 下载 CUDA 下载 cuDNN 下载 anaconda 安装 PyTorch pycharm 搭配 yolo 环境并运行 阅读本文须知&#xff0c;需要电脑中有 Nvidia 显卡 下载 CUDA 打开 cmd &#xff0c;输入 nvidia-smi &#xff0c;查看电脑支持 CUDA 版本&#xff1a; 我这里是12.0&#xff0c;进入…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...