java - Guice - 在构造函数内部使用注入(inject)字段

标签 java dependency-injection guice

有没有办法可以在默认构造函数中使用注入(inject)的字段?下面是伪代码 -

public class SomeClass() {
    @Inject private SomeField someField;
    @Inject private SomeOtherField someOtherField;

    private SomeImportantObject someImportantObject;

    public SomeClass() {
        SomeBuilder
            .get()
            .withFieldValue( someField.getValue() )
            .withSomeOtherFieldValue( someOtherField.getValue() )
            .build();
    }
}

现在我面临的问题是,当我调用 injector.getInstance( SomeClass.class ) 时,我得到一个 NullPointerException

Caused by: java.lang.NullPointerException
    at com.something.something.SomeClass.<init>(SomeClass.java:10)

现在我明白发生这种情况是因为在注入(inject)依赖项之前调用了默认构造函数。

但是,有没有什么方法可以在之前注入(inject)依赖项?
或者,有更好的方法吗?

Note, I do not want to inject these dependencies using constructor as I am expecting around 20-30 of such fields.

最佳答案

如果这些字段被注入(inject)纯粹是为了供 SomeBuilder 使用来生成 SomeImportantObject,那么:

  • 注入(inject)已设置这些字段的 SomeBuilder 实例,或者
  • 注入(inject) SomeImportantObject 的实例。

我理解您希望避免使用太多参数使构造函数膨胀。在这种情况下,我想看看这些属性是否可以在逻辑上分组为几个(或单个)新类型,而不是作为构造函数参数传递。

关于java - Guice - 在构造函数内部使用注入(inject)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52047307/

相关文章:

java - JAVA 中具有不可序列化注入(inject)成员的可序列化类

java - 现场注入(inject) Gin

java.lang.NoClassDefFoundError : com. example.bylyngo

java - 通用对象的 HashCode 实现

java - 如何从linkedin认证中oauth的回调URL中获取code和state

java - Struts2中如何获取Springs ApplicationContext?

c# - 依赖需要根据StructureMap中请求的父类型进行不同的配置

android - 应用恢复后单例对象变为空

java - Guice3 Singleton 从未在 GAE 项目中实例化

java - C# 和 Java Web 服务集成