首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring Boot 依賴注入核心機制與註解實戰詳解

     編輯:Java 相關知識

從 XML 到註解:依賴注入的演進

傳統 Spring 需在 XML 中聲明 `` 並配置 `property` 或 `constructor-arg` 實現依賴注入。Spring Boot 採用「約定優於配置」,透過元件掃描與註解驅動,讓注入變得極簡:宣告介面、實作類加註解、注入點加 `@Autowired`,完成。

四大層級註解對比

註解語意層級適用場景
@Component通用元件難以歸類的通用類別
@Repository資料存取層 (DAO)資料庫操作類別,可自動轉換 SQL 異常
@Service業務邏輯層核心業務處理,語意最明確
@Controller表現層處理 HTTP 請求,配合 @RequestMapping

四者本質相同(均繼承 `@Component`),但語意化分層有助於程式碼閱讀與 AOP 切點精準匹配。

實戰範例

1. 定義業務介面與實作

public interface TestBiz {
    String getTest(String str);
}

@Component  // 或 @Service
public class TestBizImp implements TestBiz {
    @Override
    public String getTest(String str) {
        return "Return value is: " + str;
    }
}

2. Controller 注入與使用

@Controller
public class TestController {
    @Autowired  // 欄位注入(最常用)
    private TestBiz testBiz;

    @RequestMapping("/getTest")
    @ResponseBody
    public String getTest(String str) {
        return testBiz.getTest(str);
    }
}

3. 其它注入方式

// 建構子注入(推薦:不可變、易測試)
@Autowired
public TestController(TestBiz testBiz) {
    this.testBiz = testBiz;
}

// Setter 注入
@Autowired
public void setTestBiz(TestBiz testBiz) {
    this.testBiz = testBiz;
}

驗證結果

啟動專案,訪問 https://localhost:8080/getTest?str=hello,回傳 Return value is: hello,證明依賴注入成功。

進階:條件裝配與多實作選擇

// 多實作時指定名稱
@Autowired
@Qualifier("testBizImp")
private TestBiz testBiz;

// 條件裝配:僅在特定環境生效
@Bean
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
public TestBiz testBiz() { return new TestBizImp(); }

核心原理一覽

  • @ComponentScan:掃描基礎包下所有帶有 `@Component` 衍生註解的類別
  • BeanDefinition 註冊:解析類別元資料,註冊到 `BeanFactory`
  • 依賴解析:遇到 `@Autowired` 時,從容器尋找型別匹配的 Bean
  • 生命週期管理:單例預設、初始化/銷毀回調、AOP 代理建立

Spring Boot 的依賴注入不只是語法糖,更是「配置即程式碼」哲學的體現。善用建構子注入 + `final` 欄位,能寫出更穩健、可測試的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved