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

Java GUI:深度对象注入

商佑运
2023-03-14

我有B、C和D类。刚才,我想添加一个a类,其属性完全绑定到应用程序配置中的值。使用Guice将值注入到类A中的最佳实践是什么?

public class A {
    public A(@Named("id") String id, ..., @Named("attr") String attr) {
        ....
    }   
}

public class B {
    public B() {
        this.a = new A();
    }
}


 public class C {
    public C() {
         this.b = new B();
    }
 }

 public class D {

     @Inject
     private Injector injector;

     public D() {
          this.c = new C();
     }
 }

我能想到的一种可能性是将喷油器实例从D传递到B,并更改B s.t.:

public class B {
    public B(Injector injector) {
        this.a = injector.getInstance(A.class);
    }
}

这似乎很糟糕,我没有看到使用它的在线示例。欢迎任何建议。

共有1个答案

庾才
2023-03-14

与其新建,不如要求它们作为依赖项传入。类似这样:

class A {
    private final String id;
    private final String attr;

    @Inject
    A(String id, String attr) {
        this.id   = id;
        this.attr = attr;
    }
}

class B {
    private final A a;

    @Inject
    B(A a) {
        this.a = a;
    }
}


class C {
    private final B b;

    @Inject
    C(B b) {
        this.b = b;
    }
}

class D {
    private final C c;

    @Inject
    D(C c) {
        this.c = c;
    }
}

然后使用GUI根据需要创建和注入实例:

@Module
public class Module {
    @Provides
    public A provideA(@Named("id") String id, @Named("attr") String attr) {
        return A(id, attr);
    }

    @Provides 
    public B provideB(A a) {
        return new B(a);
    }

    @Provides 
    public C provideC(B b) {
        return new C(b);
    }

    @Provides 
    public D provideD(C c) {
        return new D(c);
    }
}
 类似资料:
  • 注意 由于JS对象包括的范围非常广,加上ES6又有众多的新特性,很难、也没必要做到囊括所有的类型和情况,这里说的"对象",指的是普通的对象,不包括修改对象原型链, 或者为"Function","Promise"等的情况,请留意。 在ES6中,我们可以很方便的使用Object.assign进行对象合并,但这只是浅层的合并,如果对象的属性为数组或者对象的时候,会导致属性内部的值丢失。 注意: 此处合并

  • deepClone 对象深度克隆 注意 由于JS对象包括的范围非常广,加上ES6又有众多的新特性,很难、也没必要做到囊括所有的类型和情况,这里说的"对象",指的是普通的对象,不包括修改对象原型链, 或者为"Function","Promise"等的情况,请留意。 场景: 我们平时可能会遇到需要通过console.log打印一个对象,至执行打印的时刻,此对象为空,后面的逻辑中对此对象进行了修改赋值,

  • 问题内容: 我想知道是否需要避免在创建一个带有嵌入式对象数组的简单对象时复制对对象的引用。情况如下:我有一个接受JSON并应用一些逻辑然后将对象存储在其中的服务器D B。可以说,我的表单用于保存DB中的团队。服务器接受team作为json。团队有一个TeamMember对象数组,我的表单有一个简单的字段来输入团队成员信息并将其添加到团队teamMembers数组中。现在这是一个问题,当我向数组列表

  • 问题内容: 通常我会使用浅拷贝对象 这是一个例子: 将给我们: 但是,如果我想合并对象以使父键不会被子对象覆盖,该怎么办: 将给我们: 是否有一个Angular函数已经执行了我不知道的深度合并? 如果不是,则有一种本机方法可以在javascript中递归地执行n个级别的操作。 问题答案: Angular 1.4或更高版本 用途: 不同于,递归地进入源对象的对象属性,执行深层复制。 旧版本的Angu

  • 问题 你想复制一个对象,包含其所有子对象。 解决方案 clone = (obj) -> if not obj? or typeof obj isnt 'object' return obj if obj instanceof Date return new Date(obj.getTime()) if obj instanceof RegExp flags

  • 问题内容: 现在并包含相同的日期- 从现在起三年。我想创建两个单独的日期时间,其中一个是从字符串中解析出来的,另一个是添加了三年的时间。目前,我已经将其修改为: 但这似乎是一个可怕的骇客。有没有“正确”的方法来深度复制DateTime对象? 问题答案: 更新: 如果要复制而不是引用现有的DT对象,请使用,而不是。