Cla*_*dix 1 java spring dependency-injection spring-boot
我是 Spring 的新手,最近注意到@Autowired不鼓励在类字段中使用。相反,建议使用构造函数进行依赖注入 (DI)。
问题是我定义了一个需要访问许多存储库的 bean。最初,该 bean 有几个自动装配的字段,保存对这些存储库的引用,但现在我只是删除了注释@Autowired并使用构造函数来初始化它们。结果是一个带有许多参数的构造函数,只要我创建更多存储库/服务,这些参数将来可能会增长:
@Bean
public Syncer syncer(SatBackendApplication.AppParamService appParamService,
CustomerRepository customerRepository,
AddressRepository addressRepository,
ContactPersonRepository contactPersonRepository,
CustomerContractRepository customerContractRepository,
ProductRepository productRepository,
OrderRepository orderRepository,
OrderRepository.OrderLineRepository orderLineRepository
) {
return new Syncer(
appParamService,
customerRepository,
addressRepository,
contactPersonRepository,
customerContractRepository,
productRepository,
orderRepository,
orderLineRepository);
}
Run Code Online (Sandbox Code Playgroud)
这是向 bean 注入依赖项的正确方法吗?有没有代码更少的替代解决方案?
是的,具有多个参数的构造函数是 DI 的结果。这是一件好事,因为您可以在 DI 之外创建这些对象(例如在测试中),而不会遇到诸如未初始化字段之类的问题。
但是,在生产代码中手动调用这些构造函数并不好。@Bean您根本不需要该方法,只需注释该类Syncer,以便 Spring 可以@Autowire在您需要的地方为您提供它。
还要考虑到,如果您需要那么多依赖项,则可能您的类做得太多了。看看是否可以将其职责分成不同的类。
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |