17. Spring Beans and Dependency Injection

你可以自由使用任何标准的Spring框架技术来定义你的实例及其依赖项注入.为简单起见,我们经常发现,使用@ComponentScan(找到你的实例)并使用@autowired(构造函数注入)能很好的工作.

如果你按照上述建议组织你的代码(在根包中配置应用程序类),您可以添加@ComponentScan注解无需任何参数. 你所有的应用程序组件(@component,@service,@Repository,@controller等等)都将被自动注册为Spring实例. 下面的示例展示了一个使用@Service注解的实例,通过构造注入的方式获取RiskAssessor实例.

  1. package com.example.service;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. @Service
  5. public class DatabaseAccountService implements AccountService {
  6. private final RiskAssessor riskAssessor;
  7. @Autowired
  8. public DatabaseAccountService(RiskAssessor riskAssessor) {
  9. this.riskAssessor = riskAssessor;
  10. }
  11. // ...
  12. }

如果实例只有一个构造函数,你可以忽略@Autowired注解,如下所示:

  1. @Service
  2. public class DatabaseAccountService implements AccountService {
  3. private final RiskAssessor riskAssessor;
  4. public DatabaseAccountService(RiskAssessor riskAssessor) {
  5. this.riskAssessor = riskAssessor;
  6. }
  7. // ...
  8. }

Tip

注意使用构造函数注入让riskAssessor字段标记为final,表明后续使用该引用不能被改变.