我将为Java 7编写的应用程序升级到版本8.它使用Guice将配置值注入到对象的构造函数中。但是,在提升Java版本之后,我现在在运行单元测试时遇到了这个神秘的错误:
java.lang.RuntimeException: com.google.inject.CreationException: Guice creation errors:
1) No implementation for java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection) was bound.
while locating java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection)
for field at AsyncHttpClientConfigProvider.allowPoolingConnection(AsyncHttpClientConfigProvider.java:212)
at Module.configure(Module.java:24)
...
13 errors
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at org.jukito.JukitoRunner.ensureInjector(JukitoRunner.java:105)
at org.jukito.JukitoRunner.computeTestMethods(JukitoRunner.java:233)
... 19 more
我可能会遗漏哪些会导致此错误?
答案 0 :(得分:2)
琐碎的是,您错过了@Config(AsyncHttpClientConfigProvider.allowPoolingConnection) Optional<Boolean>
的绑定,这与@Config(AsyncHttpClientConfigProvider.allowPoolingConnection) Boolean
不同。对于更具体的答案,我们需要查看更多您之前的工作注入点和当前失败的注入点,但鉴于java.util.Optional在Java 8之前不存在,它是可能是你自己添加了这个,因此更改了用于查找绑定的Guice Key。
支持Java 8's Optional<T>
,与其他Java 8支持一样,在Guice 4.0 (Apr 2015)中出现,并且仅在使用Multibindings OptionalBinder
时才支持。如果没有它,或者在以前版本的Guice中,当用作密钥时,您的Injector将像任何其他泛型类型一样对待Optional。
Guice 3.0&#34;可选&#34;绑定仅限于使用@Inject(optional=true)
的方法和字段注入,这仍然有效,但Guice 4.0升级中的任何内容都不会自动支持Multibindings案例之外的可选类型。