我有一個Google雲終端應用程序成功working with Guice。Guice注入Google雲終端變形器
我希望將一個單例注入一個Api Transformer。
比方說,我想轉換成東西SomethingElse,那裏的東西宣稱它的變壓器是:
import com.google.api.server.spi.config.Transformer;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class MyApiTransformer
implements Transformer<Something, SomethingElse> {
private MySingleton singleton;
@Inject
public MyApiTransformer(MySingleton singleton) {
this.singleton = singleton;
}
@Override
public Something transformFrom(SomethingElse somethingElse) {
return singleton.something(somethingElse);
}
@Override
public SomethingElse transformTo(Something something) {
return singleton.somethingElse(something);
}
}
請注意,我想委託轉型,我吉斯單。當我嘗試上述變壓器我得到以下錯誤:
java.io.IOException: com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Failed to instantiate custom serializer MyApiTransformer, constructors not found: [(interface java.lang.reflect.Type), (class java.lang.Class),()]
看來,吉斯不提供ApiTransformers所以傑克遜不知道如何實例化類沒有默認構造函數。
Guice如何將Singleton注入ApiTransformer?
你爲什麼會選擇靜態注射? –
@JanGalinski我沒有選擇它,但它確實有效。我希望有更好的解決方案。 –
使字段非靜態並在變量實例上使用「injector.injectMembers()」應該會給出相同的結果,但不會打開「靜態」上下文,這可能會以意外的方式干擾guice的單例。 –