我正在研究Spring框架,我对此示例的构造函数中的 @Autowired 注释有以下疑问:
@Component
public class TransferServiceImpl implements TransferService {
@Autowired
public TransferServiceImpl(AccountRepository repo) {
this.accountRepository = repo;
}
}
究竟是什么意思? AccountRepository repo 对象(在某处定义为组件)会自动注入 TransferServiceImpl()构造函数吗?
这项操作如何运作?是按类型完成的吗? (因为 AccountRepository 是Spring默认的 singleton ),还是什么?
TNX
答案 0 :(得分:9)
Spring将在容器中查找AccountRepository
bean。有多种可能的情况:
1-零豆类型为AccountRepository
。将抛出异常。
2-有一个类型为AccountRepository
的bean。在构造TransferServiceImpl
时将注入bean。
3-有多个类型为AccountRepository
的bean:
AccountRepository
的{{1}}类型的bean。如果找到匹配,则会注入。答案 1 :(得分:2)
使用@Component
告诉扫描进程该类是一个bean,@autowire
告诉后处理器在spring存储库中搜索类型为AccountRepository
的bean。如果找到bean,它将与带注释的构造函数一起使用。根据范围,将使用新实例(prototype
)或已传递已实例化的bean(singleton
)。如果无论如何有两个bean匹配构造函数参数,将抛出异常。