17. Spring Bean 和依赖项注入
您可以自由使用任何标准的 Spring Framework 技术来定义 bean 及其注入的依赖项。为简单起见,我们经常发现结合使用@ComponentScan
和@Autowired
构造函数注入可以很好地找到您的 bean。
如果按照上面的建议构造代码(将应用程序类放在根包中),则可以添加@ComponentScan
而没有任何参数。您的所有应用程序组件(@Component
,@Service
,@Repository
,@Controller
等)将自动注册为 Spring Bean。
这是一个@Service
Bean 示例,该示例使用构造函数注入来获取所需的RiskAssessor
Bean。
package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
如果 bean 具有一个构造函数,则可以省略@Autowired
。
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
Tip
请注意,使用构造函数注入如何将riskAssessor
字段标记为final
,指示该字段随后不能更改。