17. Spring Beans和依赖注入
你可以自由地使用任何标准的Spring Framework技术来定义你的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
,表明它之后不能被改变。