如需获取最新稳定版本,请使用 Spring Boot 4.0.4spring-doc.cadn.net.cn

Spring Bean 与依赖注入

您可以自由使用任何标准的 Spring 框架技术来定义 Bean 及其依赖注入关系。 我们通常建议使用构造函数注入来装配依赖项,并使用 @ComponentScan 来查找 Bean。spring-doc.cadn.net.cn

如果您按照上述建议组织代码(将应用程序类置于顶层包中),则可以不带任何参数地添加 @ComponentScan,或者使用隐式包含该注解的 @SpringBootApplication 注解。 您的所有应用程序组件(@Component@Service@Repository@Controller 及其他组件)将自动注册为 Spring Bean。spring-doc.cadn.net.cn

以下示例展示了一个使用构造函数注入来获取必需的 RiskAssessor Bean 的 @Service Bean:spring-doc.cadn.net.cn

import org.springframework.stereotype.Service;

@Service
public class MyAccountService implements AccountService {

	private final RiskAssessor riskAssessor;

	public MyAccountService(RiskAssessor riskAssessor) {
		this.riskAssessor = riskAssessor;
	}

	// ...

}
import org.springframework.stereotype.Service

@Service
class MyAccountService(private val riskAssessor: RiskAssessor) : AccountService

如果一个 Bean 具有多个构造函数,则需要使用 @Autowired 标记您希望 Spring 使用的构造函数:spring-doc.cadn.net.cn

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;
	}

	// ...

}
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.io.PrintStream

@Service
class MyAccountService : AccountService {

	private val riskAssessor: RiskAssessor

	private val out: PrintStream

	@Autowired
	constructor(riskAssessor: RiskAssessor) {
		this.riskAssessor = riskAssessor
		out = System.out
	}

	constructor(riskAssessor: RiskAssessor, out: PrintStream) {
		this.riskAssessor = riskAssessor
		this.out = out
	}

	// ...

}
请注意,使用构造函数注入可将 riskAssessor 字段标记为 final,表明该字段后续无法再被修改。