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,表明它不能随意更改。
每天学习一点点,每天进步一点点。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!