6.5. Spring Bean 和依赖注入

您可以自由地使用任何标准 Spring 框架技术来定义您的 bean 及其注入的依赖项。我们通常建议使用构造函数注入来连接依赖项并通过@ComponentScan查找 bean。

如果您按照上面的建议构建代码(将应用程序类定位在顶级包中),则可以在@ComponentScan不添加任何参数的情况下添加或使用@SpringBootApplication隐式包含@ComponentScan注释。您的所有应用程序组件(@Component@Service@Repository@Controller和其他)都会自动注册为 Spring Bean。

以下示例显示了使用构造函数注入来获取所需 @Servicebean 的RiskAssessor Bean:

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

如果一个 bean 有多个构造函数,您需要通过@Autowired标记您希望 Spring 使用的构造函数:

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    private final PrintStream out;

    @Autowired
    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
        this.out = System.out;
    }

    public MyAccountService(RiskAssessor riskAssessor, PrintStream out) {
        this.riskAssessor = riskAssessor;
        this.out = out;
    }

    // ...

}

请注意如何使用构造函数注入将riskAssessor字段标记为final,表示随后无法对其进行更改。

最后更新于