我有一项名为InformationService
. 它可选地取决于ReleaseService
. 如果external.releaseservice.url
设置了属性,InformationService
则应向它发出请求并使用聚合数据丰富它自己的响应。
但是,如果 url 未定义,则响应应简单地返回一个字符串,类似于not available
相关字段。
实现这一目标的弹簧启动方式是什么?注入的Optional<ReleaseService>
进入InformationService
?还有其他模式吗?
您可以通过三种方式实现这一目标。
@Autowired(必需=假)
这是有效的,但它需要字段注入,这对于众所周知的单元测试来说不是很好。
@Autowired(required = false)
private ReleaseService releaseService;
Java 可选类型
正如你所说,它Optional
也可以完成这项工作,它允许你坚持构造函数注入。这是我建议的方法。
Spring 的 ObjectProvider
还有一个ObjectProvider
专为注射点设计的,您可以使用它来实现这一点,如下所示。
public InformationService(ObjectProvider<ReleaseService> releaseServiceProvider) {
this.releaseService = releaseServiceProvider.getIfAvailable();
}
它更麻烦,因此我会避免它。如果没有可用的实例,则有一个优势可以让您指定默认实例,但我想这不是您所需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句