跳到主要内容
版本:3.5.10

Spring Beans 和依赖注入

QWen Max 中英对照 Spring Beans and Dependency Injection

你可以自由使用任何标准的 Spring Framework 技术来定义你的 bean 及其注入的依赖项。我们通常建议使用构造函数注入来连接依赖项,并使用 @ComponentScan 来发现 bean。

如果你按照上述建议组织代码(将你的应用类放在顶层包中),你可以不带任何参数地添加 @ComponentScan,或者使用 @SpringBootApplication 注解,它会隐式包含该注解。你所有的应用组件(@Component@Service@Repository@Controller 等)都会自动注册为 Spring Bean。

以下示例展示了一个使用构造函数注入来获取所需 RiskAssessor Bean 的 @Service 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,表明其后续不能被更改。