1. 程式人生 > 其它 >SpringBoot 官方文件中文版 - 5. Spring Beans 和 DI

SpringBoot 官方文件中文版 - 5. Spring Beans 和 DI

前言

這是 SpringBoot 官方文件中文翻譯版系列的第五篇文章:

前四篇文章如下:

SpringBoot 官方文件中文版 - 1. 入門指南

SpringBoot 官方文件中文版 - 2. 構建系統

SpringBoot 官方文件中文版 - 3. 構建你的程式碼

SpringBoot 官方文件中文版 - 4. 配置類與自動化配置

Spring Beans and Dependency Injection

您可以自由使用任何標準 Spring Framework 技術來定義 bean 及其注入的依賴項。我們通常建議使用建構函式注入來連線依賴項,並使用 @ComponentScan 來查詢 bean。

如果按照上面的建議構造程式碼(將應用程式類放在頂級包中),可以不帶任何引數地新增 @ComponentScan,或者使用 @SpringBootApplication 註釋(它隱式地包含了它)。你的所有應用元件(@Component, @Service, @Repository, @Controller等等)都會自動註冊為 Spring bean

下面的示例展示了一個 @Service Bean,它使用建構函式注入來獲取所需的 RiskAssessor Bean:

import org.springframework.stereotype.Service;

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

如果一個 bean 有多個建構函式,你需要用 @Autowired 標記你想讓 Spring 使用的那個建構函式:

import java.io.PrintStream;

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

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    private final PrintStream out;

    @Autowired
    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
        this.out = System.out;
    }

    public MyAccountService(RiskAssessor riskAssessor, PrintStream out) {
        this.riskAssessor = riskAssessor;
        this.out = out;
    }

    // ...

}

請注意,使用建構函式注入時,riskAssessor 欄位被標記為 final,表明它不能隨意更改。

每天學習一點點,每天進步一點點。