| 此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Boot 3.5.5! | 
Spring Beans 和依赖注入
您可以自由使用任何标准的 Spring Framework 技术来定义 bean 及其注入的依赖项。
我们通常建议使用构造函数注入来连接依赖项和@ComponentScan寻找豆子。
如果您按照上述建议构建代码(将应用程序类定位在顶级包中),则可以将@ComponentScan没有任何参数或使用@SpringBootApplication隐式包含它的注释。
您的所有应用程序组件 (@Component,@Service,@Repository,@Controller等)会自动注册为 Spring Beans。
以下示例显示了@Service使用构造函数注入来获取所需RiskAssessor豆:
- 
Java 
- 
Kotlin 
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 有多个构造函数,则需要标记您希望 Spring 使用的构造函数@Autowired:
- 
Java 
- 
Kotlin 
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,表示后续无法更改。 |