SpringBoot 官方文件中文版 - 5. Spring Beans 和 DI
阿新 • • 發佈:2021-07-25
前言
這是 SpringBoot 官方文件中文翻譯版系列的第五篇文章:
前四篇文章如下:
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,表明它不能隨意更改。
每天學習一點點,每天進步一點點。