1
我有以下模塊,具有requireBinding:吉斯requireBinding到TypeLiteral拋出錯誤
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
bind(WalletBilling.class).to(WalletBillingService.class);
requireBinding(Key.get(new TypeLiteral<Map<String, String>>() {}, ResourceUrls.class));
}
@Provides
String returnUrls(@ResourceUrls Map<String, String> resourceUrls){
return resourceUrls.get("hello");
}
}
我注意到,當我運行實例化的模塊,我得到下面的錯誤代碼:
異常的線程「主要」 com.google.inject.CreationException:吉斯創建錯誤:
1) No implementation for java.util.Map<java.lang.String, java.lang.String> annotated with interface com.example.helloworld.annotations.ResourceUrls was bound.
at com.example.helloworld.modules.BillingModule.configure(BillingModule.java:32)
1 error
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 com.example.helloworld.Main.main(Main.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
我想用@ResourceUrls註解@Provides方法PARAM我有滿意的結合,但事實並非如此,我是Guice的小菜鳥,所以會欣賞一些指針。
這將導致「@ResourceUrls不適用方法:」我相信BindingAnnotations只能應用於PARAMS沒有方法.. – jwesonga
@jwesonga,不,這取決於你的'@ ResourceUrls'定義。這是你的註釋,不是嗎?檢查'@interface ResourceUrls'定義中的'@ Target'註釋。它必須包含'METHOD'才能應用於方法。順便說一句,塔維安是絕對正確的。如果你沒有在任何地方定義它,Guice應該知道注入哪張地圖? –
我改變了我的註解的目標,一切都在運行..我想我的問題是我從一個現有的代碼庫看這段代碼,它似乎沒有提供者運行得很好,所以我不知道在原來的位置代碼地圖正在提供.. – jwesonga