Spring中的可选依赖项

我是Spring框架的常规用户,我想我对框架非常了解,但是似乎我总是在寻找我不知道的有用东西。 在Devoxx,我了解到您可以使用Java 8的新Optional<T>类型来表达条件依赖。 请注意,在Java 8之前,可以使用@Autowired(required = false)自动连接可选的依赖项,但随后必须检查null。

那有多好? 好吧,我可以考虑一百万个用例,但是以下这些是我想到的:

  • 取决于上下文,防止使用基础结构依赖项。 例如,在开发环境中,无需将指标发送到MetricRegistry
  • 未提供所需的基础结构依赖项时提供默认值, 例如 h2数据源
  • 在测试环境中也可以这样做。
  • 等等

实现非常简单:

@ContextConfiguration(classes=OptionalConfiguration.class)
publicclassDependencyPresentTestextendsAbstractTestNGSpringContextTests{

    @Autowired
    privateOptional<HelloService>myServiceOptional;

    @Test
    publicvoidshould_return_hello(){
        StringsayHello=null;
        if(myServiceOptional.isPresent()){
            sayHello=myServiceOptional.get().sayHello();
        }

        assertNotNull(sayHello);
        assertEquals(sayHello,"Hello!");
    }
}

在这一点上,不仅代码可以很好地编译,而且在编译时会评估依赖项。 OptionalConfiguration包含HelloService上面的测试成功或失败,并且测试失败。

这种模式非常优雅,我建议您将其列出在可用工具包中。

翻译自: https://blog.frankel.ch/optional-dependencies-in-spring/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值