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