当前位置: 首页 > 知识库问答 >
问题:

Guice的FactoryModuleBuilder可以使用@AutoValue吗?

花高爽
2023-03-14

每https://github.com/google/guice/wiki/AssistedInject,

假设我有一个接口A,实现类AImpl和另一个接口AWorks,我与FactoryModuleBuilder一起使用-

..

install(new FactoryModuleBuilder()
    .implement(A.class, AImpl.class)
    .build(AFactory.class)
);

..

是否可以将自动值用于 AImpl?我担心的是 AImpl 将是抽象的,工厂模块将无法实例化它。如果我AutoValue_AImpl传递给工厂模块,它就不会有 @Assisted* 注释。

共有1个答案

翟凯
2023-03-14

这些包不能很好地一起工作;更重要的是,你没有理由同时使用这两个特性。

AutoValue通常创建数据对象或值对象,具有健壮的等于hashCode实现。从AutoValue创建的对象是不可变的,使用静态工厂方法而不是构造函数;Guice提供的依赖关系没有任何空间或理由。请参阅文档:

使用自动值将公共创建 API 限制为静态工厂方法,而不是构造函数。请参阅有效的 Java 第 1 项,原因有几个,无论如何,这通常是一个好主意。

AutoValue不支持也不会支持创建可变值类型。(我们可能会考虑添加对与字段样式的方法的支持,这些方法返回原始实例的新的不可变副本,其中一个字段值已更改。)

FactoryModuleBuilder 通常为具有一些注入的依赖项和一些手动指定的依赖项的对象创建工厂。如上所述,自动值包不应符合此描述。

当然,您可以使用可从Guice访问的常量构建值对象;然而,您需要通过编写自己的轻量级工厂对象来实现这一点,该对象根据需要将可注入参数映射到值对象的方法。

 类似资料:
  • 我是一个尝试使用Guice的人(这里是新手!!)我的一个项目。 所以我有一个 我的实现是 我还将DataQueue接口定义为 DataQueue的实现如下 在我的AppModule.Configure方法中,我有以下代码 我的ConsumerFactory是一个带有create()方法的接口,该方法返回一个使用者 我的DataQueueFactory是一个带有create()方法的接口,该方法返回

  • 这是一个奇怪的用例,我需要一些帮助来弄清楚如何相互结合使用辅助/提供者/FactoryModuleBuilders。忽略的缺失。这只是一个例子。 属于我无法更改的库的一组特征具有以下模式。它使用蛋糕图案。 由于这些特征不能被直接注入,我创建了一个允许它们被注入的包装器 在我的代码中,我有一个依赖于服务的控制器,而服务又依赖于库。根据控制器的需要,服务应能够使用“BB”或“CC”。组件如下所示 我将

  • TLDR;JDBI 注释使用自动生成的类型生成 ,因为生成的类型是包私有的,默认情况下无法使用反射进行访问。 JDBI是不灵活的还是有通过AutoValue的解决方法?(以下是完整的问题) 快速背景 我正在尝试使用JDBI 注释,其类型的源代码是使用AutoValue生成的。 问题是生成的代码看起来像: 请注意,类是包私有的! 现在,如果我尝试使用< code>@BindBean,例如: 因为是包

  • 我是一名guice新手,试图弄清楚如何使用FactoryModuleBuilder在guice中实现辅助注入。我参考了guice java文档来实现FactoryModuleBuilder。 我所做的一切都完全按照文件中所说的那样。这不是注射工厂。我提到了这个堆栈溢出问题:Guice AssistedInject不会注入具有相同问题的工厂。它讨论了构造函数注入之前的字段注入问题。我遵循了它,并尝试

  • 在Scala中,我可以使用Guice注入Scalas吗? 例如,我可以在以下对象中注入?

  • dagger2是否可以和Guice一样与jersey一起使用? 是否有任何dagger2 servlet或dagger2 jersey项目?