1
我有一個Maven模塊,我定義了其他幾個Maven模塊共享的一些utils。 在這個模塊中我想創造一些單:Guice:使用注射器?
package org.me.util;
public interface Baz {
String myMethod(String s);
}
@Singleton
public class Foo implements Baz {
private Bar bar;
@Inject
Foo(Bar bar) {
this.bar = bar;
}
@Override
public String myMethod(String s) {
return s;
}
}
然後,我結合我的接口:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Baz.class).to(Foo.class);
}
}
假設我想利用這個獨生子從另一個Maven的模塊(比如Web服務) ,我該如何做到這一點? 我發現的唯一辦法是在我UTIL Maven的模塊創建一個類,如:
package org.me.util;
public class Main {
private static Injector injector = Guice.createInjector(new MyModule());;
public static Injector getInjector() {
return injector;
}
我也可以在靜態main方法創建噴油器所看到的吉斯教程,並保存在某個地方實例。
從我的web服務然後做這樣的事情:
Baz baz = Main.getInjector().getInstance(Baz.class);
但這似乎不是很優雅,因爲我必須(向它提供一個靜態的吸氣劑在這種情況下)周圍通過我的注射器。
有沒有其他辦法?謝謝。
理想情況下,你也想注入什麼是其他模塊中。你可以@Inject Baz baz'然後從注射器得到需要的'Baz'的實例嗎? – condit 2014-11-06 13:28:22
我不知道我跟着你。我正在爲Guice和DI做第一步。但注入@Inject Baz baz這樣的字段不是不好的做法嗎?無論如何,我不明白如何在不使用噴油器的情況下獲得我的單例實例。 – dmz73 2014-11-06 14:39:47
對 - 你也可以注入到其他類的構造函數中。我要說的是,如果可能的話,你應該'@Inject'你的單身人士在你需要它的地方。如果Guice創建對象,它只能幫助你。 – condit 2014-11-06 15:14:33