在 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 注解,可以有效地管理和共享對象。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI+智造】DeepSeek價值重構:當采購與物控遇上數字化轉型的化學反應

作者:Odoo技術開發/資深信息化負責人 日期:2025年2月24日 引言:從事企業信息化工作16年,我見證過無數企業從手工臺賬到ERP系統的跨越。但真正讓采購和物控部門脫胎換骨的,是融合了Deepseek AI的Odoo數字化解決方案——…

qt-C++筆記之創建和初始化 `QGraphicsScene` 和 `QGraphicsView` 并關聯視圖和場景的方法

qt-C++筆記之創建和初始化 QGraphicsScene 和 QGraphicsView 并關聯視圖和場景的方法 code review! 參考筆記 1.qt-C++筆記之創建和初始化 QGraphicsScene 和 QGraphicsView 并關聯視圖和場景的方法 2.qt-C++筆記之QGraphicsScene和 QGraphicsView中setScene、通過scene得到vie…

Java Map實現類面試題

Java Map實現類面試題 HashMap Q1: HashMap的實現原理是什么? HashMap基于哈希表實現,使用數組鏈表紅黑樹(Java 8)的數據結構。 public class HashMapPrincipleExample {// 模擬HashMap的基本結構public class SimpleHashMap&…

Win32/ C++ 簡易對話框封裝框架(多語言, 通知欄菜單, 拖拽文件處理)

Win32 簡易對話框封裝簡易框架示例 1. 菜單操作: 多語言 2. 通知欄圖標菜單 3. 其他操作: 接受拖拽文件等等 CDialogFrame.h #pragma once #include "CWindow/CDialogBase.h" #include "CNSFHeader.h" #include "Win32Utils/CBytesUtils.h" …

如何在WordPress網站中查看移動版本—快速預覽與自定義設置

在WordPress網站的構建過程中,確保網站在移動端的顯示效果至關重要。畢竟,隨著越來越多的用戶通過手機訪問互聯網,一個優化良好的移動版網站將直接影響用戶的留存率和訪問體驗。 如果你是WordPress網站的所有者,本文將向你介紹如…

課程1. 深度學習簡介

課程1. 深度學習簡介 神經網絡結構邏輯回歸XOR問題(異或問題) 中間特征的生成全連接神經網絡中間網絡層的激活函數Sigmoid函數Tanh函數ReLU函數其它激活函數 使用全連接神經網絡解決 XOR 問題神經網絡用于回歸問題訓練神經網絡 不同類型的神經網絡 附加材…

Vue.js Vue 測試工具:Vue Test Utils 與 Jest

Vue.js Vue 測試工具:Vue Test Utils 與 Jest 在 Vue.js 的開發過程中,編寫和執行測試是確保應用質量和穩定性的關鍵步驟。Vue Test Utils 和 Jest 是 Vue.js 官方推薦的測試工具,二者結合使用,可以高效地進行單元測試和集成測試…

數據結構 1-2 線性表的鏈式存儲-鏈表

1 原理 順序表的缺點: 插入和刪除移動大量元素數組的大小不好控制占用一大段連續的存儲空間,造成很多碎片 鏈表規避了上述順序表缺點 邏輯上相鄰的兩個元素在物理位置上不相鄰 頭結點 L:頭指針 頭指針:鏈表中第一個結點的存儲…

各種以太坊Rollup技術

以太坊Rollup技術是一種通過將大量交易批處理并在主鏈上記錄較小的數據摘要來擴展以太坊網絡的方法。Rollup技術主要分為兩種類型:樂觀Rollup(Optimistic Rollup)和零知識Rollup(ZK-Rollup)。下面詳細介紹這兩種技術及…

Kubernetes開發環境minikube | 開發部署MySQL單節點應用

minikube是一個主要用于開發與測試Kubernetes應用的運行環境 本文主要描述在minikube運行環境中部署MySQL單節點應用 minikube start --force kubectl get nodes 如上所示,啟動minikube單節點運行環境 minikube ssh docker pull 如上所示,從MySQL官…

DeepSeek 助力 Vue 開發:打造絲滑的二維碼生成(QR Code)

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 Deep…

一文詳解U盤啟動UEFI/Legacy方式以及GPT/MBR關系

對于裝系統的老手而說一直想研究一下裝系統的原理,以及面對一些問題時的解決思路,故對以前的方法進行原理上的解釋,主要想理解其底層原理。 引導模式 MBR分區可以同時支持UEFI和Legacy引導,我們可以看一下微pe制作的啟動盤&#…

回合制游戲文字版(升級)

//在上一篇博客的基礎上,加了細節的改動 //改動:添加了外貌,性別,招式的細節描繪;添加了個人信息展示界面 //一創建java文件1,命名為playGame package test2;import java.util.Random;public class play…

halcon三維點云數據處理(二十五)moments_object_model_3d

目錄 一、moments_object_model_3d例程二、moments_object_model_3d函數三、效果圖一、moments_object_model_3d例程 這個例子說明了如何使用moments_object_model_3d運算符來將3D數據與x、y、z坐標軸對齊。在實際應用中,通過3D傳感器獲取的物體模型可能具有一個與物體主軸不…

一周學會Flask3 Python Web開發-flask3上下文全局變量session,g和current_app

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程: 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili flask3提供了session,g和current_app上下文全局變量來方便我們操作訪問數據。 以下是一個表格,用于比較Flask中的…

antv G6繪制流程圖

效果圖&#xff08;優點&#xff1a;可以自定義每一條折線的顏色&#xff0c;可以自定義節點的顏色&#xff0c;以及折線的計算樣式等&#xff09;&#xff1a; 代碼&#xff1a; <!-- 流程圖組件 --> <template><div id"container"></div>…

DeepSeek-R1本地部署保姆級教程

一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;輕量級模型 ▌DeepSeek-R1-1.5B 內存容量&#xff1a;≥8GB 顯卡需求&#xff1a;支持CPU推理&#xff08;無需獨立GPU&#xff09; 適用場景&#xff1a;本地環境驗證測試/Ollama集成調試 &#xff08;二&a…

2025-spring boot 之多數據源管理

1、是使用Spring提供的AbstractRoutingDataSource抽象類 注入多個數據源。 創建 DataSourceConfig 配置類 通過spring jdbc 提供的帶路由的抽象數據源 AbstractRoutingDataSource import org.springframework.beans.factory.annotation.Autowired; import org.springframew…

keycloak - 開發環境的配置持久化

keycloak - 開發環境的配置持久化 前情提要&#xff1a; Keycloak - docker 運行 & 前端集成 本來是想順便試一下 Okta 集成的&#xff0c;但是發現 Okta 沒有本地的 docker 鏡像&#xff0c;他們畢竟是做 Identity as a service……算了…… 更新后的 docker compose 如…

項目實戰--網頁五子棋(匹配模塊)(4)

上期我們完成了游戲大廳的前端部分內容&#xff0c;今天我們實現后端部分內容 1. 維護在線用戶 在用戶登錄成功后&#xff0c;我們可以維護好用戶的websocket會話&#xff0c;把用戶表示為在線狀態&#xff0c;方便獲取到用戶的websocket會話 package org.ting.j20250110_g…