17、Spring Bean 与依赖注入
您可以自由使用任何标准的 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
,这表示以后它不能被更改。