我有一个Maven模块,我在其中定义了一些跨其他几个Maven模块共享的UTIL。在本模块中,我想创建一些单例:
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;
}
或者,我可以在Guice教程中看到的静态main方法中创建注入器,并将实例保存在某个地方。
然后从我的Web服务中执行以下操作:
Baz baz = Main.getInjector().getInstance(Baz.class);
但这似乎不是很优雅,因为我必须传递我的注射器(在这种情况下,通过为其提供静态吸气剂)。
还有别的办法吗?谢谢
传递Baz
对象的更优雅的方法是注入它。
例如
public class BusinessService {
private final Baz baz;
@Inject
public BusinessService(Baz baz) { this.baz = baz; }
}
如果您想在WS中使用BusinessService,请再次访问。
public class WebService {
private final BusinessService businessService;
@Inject
public WebService(BusinessService businessService) { this.businessService = businessService; }
}
通过这样做,所有依赖项都清楚地暴露在API签名中。
剩下的问题是,您必须在应用程序的入口点创建喷油器。
在独立应用程序中,喷油器通常是在main方法中创建的。
public static void main(String[] args) {
Injector injector = Guice.createInjector(new UtilModule(), new BusinessModule());
BusinessService businessService = injector.getInstance(BusinessService.class);
...
}
在Web应用程序中,注入器可能以不同的方式创建。这取决于框架。
Servlet:
删除向导:
playframework
...
我使用< code>Cucumber和< code>Guice作为DI。我遇到了以下问题:我有一个步骤,即 我让这个类作为测试运行它 有一个 由我的使用,我定义了cucumber.properties,我定义了还有一个包含方案的功能文件。现在一切都在工作。 不,我想使用其他MyService实现运行MyStep步骤(当然我不会重复MyStep的代码)我定义了一个具有新场景和新测试类的新功能文件 现
我对使用Guice有疑问。我有一个名为< code>Main的类,它是使用Guice和一个方法注入的构造函数,每次调用该方法都会创建一个类< code>AppThread的o thread对象。< code>AppThread是< code>Main中的私有类。问题是,在线程的执行过程中,我想创建一个class 的对象。此对象是使用Guice注入的构造函数。我不知道注入< code>ClassX的
我已经使用google-guice和辅助注射机制有一段时间了。因为我在scala,刚刚发现scala-guice,我也对使用它感兴趣。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。 因此,我的问题是:是否可以使用scala guice辅助注射,如果可以,请提供一个简单的例子? 此外,对于google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar
我更新了createInjector调用以包含我的JPAPersisteModule。。。 在我的持久化单元声明如下:
我正在使用Guice Assisted Inject库为我建立一个工厂。我目前的设置如下: 这迫使我使用< code > factory . create controller(first,factory . create second(first))显式创建一个< code>SecondDep。是否可以更改我的绑定,这样我就可以简单地执行< code > factory . create con
我正在努力实现DI,特别是使用guice的构造函数注入。我很难理解如何将泛型的类类型注入到构造函数中。 我的课程如下: 我可以在运行时使用guice将类的类型注入构造函数吗?简而言之,我可以使用guice注入Foo构造函数吗?