17、Spring Bean 与依赖注入

您可以自由使用任何标准的 Spring Framework 技术来定义您的 bean 以及它们注入的依赖。我们发现使用 @ComponentScan 来寻找 bean 和结合 @Autowired 构造器注入可以很好地工作。

如果您按照上述的建议(将应用类放在根包中)来组织代码,则可以添加无参的 @ComponentScan。所有应用组件(@Component@Service@Repository@Controller 等)将自动注册为 Spring Bean。

以下是一个 @Service Bean,其使用构造注入方式获取一个必需的 RiskAssessor bean。

  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. }

如果 bean 中只有一个构造方法,您可以忽略掉 @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. }

提示

请注意,构造注入允许 riskAssessor 字段被修饰为 final,这表示以后它不能被更改。