17. Spring bean和依赖项注入
你可以自由使用任何标准Spring框架技术来定义bean及其注入的依赖项,为了简单起见,我们经常发现使用@ComponentScan
(找到你的bean)和使用@Autowired
(进行构造函数注入)工作得很好。
如果按照上面建议的方式构造代码(在根包中定位应用程序类),可以不带任何参数添加@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;
}
// ...
}
注意,如何使用构造函数注入使
riskAssessor
字段被标记为
final
,表示它不能随后更改。