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,表明它不能随意更改。

每天学习一点点,每天进步一点点。

posted @   爱吃西瓜的番茄酱  阅读(2249)  评论(0编辑  收藏  举报
编辑推荐:
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
点击右上角即可分享
微信分享提示