您可以自由使用任何标准的Spring Framework技术来定义您的bean及其注入的依赖。为简单起见,我们经常发现结合@Autowired
构造方法注入来使用@ComponentScan
查找bean效果非常好。
如果您按照上述建议(将您的application类放置于根包中),则可以添加@ComponentScan
注解而无需任何参数。您所有的程序组件(@Component
、@Service
、@Repository
、`@Controller等)都会自动注册为Spring的bean。
这是一个使用构造方法注入获取所需的RiskAssessor
bean的@Service
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
的,这表示该字段之后不能更改。