17. Spring Beans and Dependency Injection
你可以自由使用任何标准的Spring框架技术来定义你的实例及其依赖项注入.为简单起见,我们经常发现,使用@ComponentScan
(找到你的实例)并使用@autowired
(构造函数注入)能很好的工作.
如果你按照上述建议组织你的代码(在根包中配置应用程序类),您可以添加@ComponentScan注解无需任何参数.
你所有的应用程序组件(@component
,@service
,@Repository
,@controller
等等)都将被自动注册为Spring实例.
下面的示例展示了一个使用@Service
注解的实例,通过构造注入的方式获取RiskAssessor
实例.
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;
}
// ...
}
如果实例只有一个构造函数,你可以忽略@Autowired注解,如下所示:
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
Tip
注意使用构造函数注入让riskAssessor字段标记为final,表明后续使用该引用不能被改变.