此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.4.3! |
Spring Bean 和依赖注入
您可以自由使用任何标准的 Spring Framework 技术来定义 bean 及其注入的依赖项。
我们通常建议使用构造函数注入来连接依赖项和@ComponentScan
查找 Beans。
如果按照上述建议构建代码(将应用程序类放在 top 包中),则可以添加@ComponentScan
不使用任何参数或使用@SpringBootApplication
注解,其中隐式包含它。
您的所有应用程序组件 (@Component
,@Service
,@Repository
,@Controller
等)将自动注册为 Spring Bean。
以下示例显示了@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
If a bean has more than one constructor, you will need to mark the one you want Spring to use with @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
}
// ...
}
Notice how using constructor injection lets the riskAssessor
field be marked as final
, indicating that it cannot be subsequently changed.