我有一个用例,我使用的是基于Spring的外部jar,而我的代码是基于Googleguice的。
我正在尝试通过编写模块在我的依赖项jar的此类中注入依赖项。
外部类:
public class PTRS {
@Inject
private Event countEvent;
@Inject
private Event durationEvent;
private GeoServiceClient gClient;
public void setGeoServiceClient(GeoServiceClient client){this.gClient=client}
}
我可以在我的模块中使用@provides方法中的setter设置成员,但@inject成员为空,我得到了countEvent和durationEvent的NullPointerException。
我的代码使用下面的provider类创建一个对象来绑定PTRS类。
@Provides
PTRS new PTRS(Client client){
PTRS ptrs = new PTRS();
ptrs.setGeoServiceClient(client);
return ptrs;
}
如何在不更改外部类的情况下注入这两个依赖项?
在Guice没有创建的对象上注入一个MendersInjector
以填充@Inject
注释字段(并调用@Inject
-anttted方法)。Guice在wiki中称之为“按需注入”,尽管我在其他地方没有听说过这个术语。
@Provides
PTRS newPTRS(Client client, MembersInjector<PTRS> ptrsInjector){
PTRS ptrs = new PTRS();
ptrsInjector.injectMembers(ptrs); // <-- inject members here
ptrs.setGeoServiceClient(client);
return ptrs;
}
如果您有权访问Injector
(它本身是可注入的),您可以直接调用injectMembers(Class)
,或者调用getMembersInjector</code>来获取您选择的类型的MembersInjector实例。然而,这里的最佳实践是注入尽可能窄的接口,以便于阅读和模仿。
问题内容: 嗨,stackoverflow世界, 我想在XSD中指定JAXB可以将特定元素用作XmlRootElement。 我知道如何将注释添加到生成的类中:我想做的是指定可以在代码生成之前将元素生成为根元素。 我使用外部JAXB定制(.xjb文件)。目的是不修改架构(因为它们正在定义标准)。 有人知道怎么做吗?谢谢! 新泽西 问题答案: 问题解决了。 JAXB插件Annotate http:/
我是一个尝试使用Guice的人(这里是新手!!)我的一个项目。 所以我有一个 我的实现是 我还将DataQueue接口定义为 DataQueue的实现如下 在我的AppModule.Configure方法中,我有以下代码 我的ConsumerFactory是一个带有create()方法的接口,该方法返回一个使用者 我的DataQueueFactory是一个带有create()方法的接口,该方法返回
主要内容:Google Guice 按需注入 示例,输出注入是将依赖注入对象的过程。方法和字段注入可用于使用injector.injectMembers()方法使用退出对象进行初始化。请参阅下面的示例。 Google Guice 按需注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。
我很困惑绑定如何与Guice一起工作。我是一家公司的初级开发人员,我正在查看我们的代码库,试图了解我们是如何在应用程序中实现Guice的。 我正在阅读关于Guice注入的指南:https://www.tutorialspoint.com/guice/guice_first_application.htm,这看起来和我们公司的做法不一样。 第一步说创建接口。我们确实在模块类中有一个扩展的绑定。 例:
我想创建一个动态绑定实例到命名注释的模块。用例是我想自动绑定配置中的值,属性文件中的键是@命名值。 然而,配置绑定在不同的模块中,所以我需要注入配置。我看过的解决方案是: > 绑定在confiure()方法中。这个方法没有注入,我不能得到基本配置。 使用提供程序/@提供程序。提供程序只绑定一个实例。 使用多活页夹。我的用例与这个扩展提供的有点不同。多重绑定允许您单独绑定多个实例,然后将它们作为包含
由于绑定是在绑定模块中定义的,Google Guice 会在需要注入依赖项时使用它们。如果不存在绑定,它可以尝试创建即时绑定。绑定模块中存在的绑定称为显式绑定并且具有更高的优先级,而即时绑定称为隐式绑定。如果两种类型的绑定都存在,则考虑使用显式绑定进行映射。 以下是三种类型的即时绑定的示例。 绑定类型 描述 可注入的构造函数 非私有、无参数构造函数有资格进行即时绑定。另一种方法是使用@Inject