我是一个尝试使用Guice的人(这里是新手!!)我的一个项目。
所以我有一个
interface Consumer{
}
我的实现是
class XMLConsumer implements Consumer {
XMLConsumer(DataQueue queue){
}
}
我还将DataQueue接口定义为
interface DataQueue {
}
DataQueue的实现如下
class FIFODataQueue implements DataQueue{
...
}
在我的AppModule.Configure方法中,我有以下代码
class MyModule extends AbstractModule {
protected void configure(){
// Why do I need this ???
bind(DataQueue.class).to(FIFODataQueue.class);
// My factories are
install(new FactoryModuleBuilder()
.implement(DataQueue.class, FIFODataQueue.class)
.build(DataQueueFactory.class));
install(new FactoryModuleBuilder()
.implement(Consumer.class, XMLConsumer.class)
.build(ConsumerFactory.class));
}
}
我的ConsumerFactory是一个带有create()方法的接口,该方法返回一个使用者
我的DataQueueFactory是一个带有create()方法的接口,该方法返回DataQueue
在我的主要方法中,我有
final Injector injector = Guice.createInjector();
ConsumerFactory consFactory = injector.getInstance(ConsumerFactory.class);
Consumer cons = consFactory.create();
所以我的问题是
>
我并不清楚地创建DataQueue,因为我希望Guice为我这样做。这是正确的吗??
我似乎需要绑定语句
将(dataqueue.class).绑定到(fifoDataqueue.class);
但我为什么需要这个。我在安装中指定了相同的信息,不是说吗
.implement(DataQueue.class, FIFODataQueue.class)
还是在这种情况下我的理解是错误的?如果不指定bind语句,在Guice尝试自动关联对象时,会得到一个instance not bound异常。
谢谢你事先的帮助。
如果您的代码或多或少是完整的,那么您对FactoryModuleBuilder做的事情就太多了。FactoryModuleBuilder适用于无法注入创建对象的所有参数的情况。它们不是用来直接注入物体的,它们是用来注入一个工厂的。ConsumerFactory
没有使用工厂来创建DataQueue
,它使用显式绑定(这就是您需要它的原因)。
错误的地方是XMLConsumer
的定义。Guice应该使用的构造函数必须用@inject
进行注释。
然后您可以向注入器请求使用者
。
由于绑定是在绑定模块中定义的,Google Guice 会在需要注入依赖项时使用它们。如果不存在绑定,它可以尝试创建即时绑定。绑定模块中存在的绑定称为显式绑定并且具有更高的优先级,而即时绑定称为隐式绑定。如果两种类型的绑定都存在,则考虑使用显式绑定进行映射。 以下是三种类型的即时绑定的示例。 绑定类型 描述 可注入的构造函数 非私有、无参数构造函数有资格进行即时绑定。另一种方法是使用@Inject
主要内容:Google Guice 内置绑定 示例,输出Google Guice 为java.util.logging.Logger类提供了内置绑定。Logger 的名称会自动设置为注入 Logger 的类的名称。请参阅下面的示例。 Google Guice 内置绑定 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。
主要内容:使用@Named 注解注入,Google Guice 常量绑定 完整示例,输出Guice 提供了一种使用值对象或常量创建绑定的方法。下面例子以配置 JDBC URL 为例。 使用@Named 注解注入 这可以使用 toInstance() 方法来实现。 Google Guice 常量绑定 完整示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。
主要内容:Google Guice 链接绑定 完整示例,输出在链接绑定中,Guice 将类型映射到其实现。在下面的示例中,我们将 SpellChecker 接口与其实现 SpellCheckerImpl 进行了映射。 我们还可以将具体类映射到它的子类。请参阅以下示例: 在这里,我们链接了绑定。让我们在完整示例中查看结果。 Google Guice 链接绑定 完整示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java
我有一个用例,我使用的是基于Spring的外部jar,而我的代码是基于Googleguice的。 我正在尝试通过编写模块在我的依赖项jar的此类中注入依赖项。 外部类: 我可以在我的模块中使用@provides方法中的setter设置成员,但@inject成员为空,我得到了countEvent和durationEvent的NullPointerException。 我的代码使用下面的provide
主要内容:Google Guice 构造方法绑定 完整示例,输出Google Guice 提供了一种使用 toConstructor() 方法创建与对象的特定构造函数的绑定的方法。 请参阅下面的完整示例。 Google Guice 构造方法绑定 完整示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。