SpringBoot 官方文档中文版 - 5. Spring Beans 和 DI
前言
这是 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,表明它不能随意更改。
每天学习一点点,每天进步一点点。