Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java POJO中断依赖注入_Java_Dependency Injection - Fatal编程技术网

Java POJO中断依赖注入

Java POJO中断依赖注入,java,dependency-injection,Java,Dependency Injection,独立于使用的DI框架——对象链中的单个POJO总是破坏DI机制 伪代码示例: class A { @Inject private B b; } class B { private C c=new C(); } class C { @Inject private D d; } 类C中的注入将不起作用,因为类B中的新C()会破坏托管对象链 我们目前正试图通过用DI机制逐步取代手动对象创建来改进我们的旧(非DI)项目 因此,如何将C迁移到DI,而不必关心

独立于使用的DI框架——对象链中的单个POJO总是破坏DI机制

伪代码示例:

class A {
    @Inject
    private B b;
}

class B {
    private C c=new C();

}

class C {
    @Inject
    private D d;
}
类C中的注入将不起作用,因为类B中的
新C()
会破坏托管对象链

我们目前正试图通过用DI机制逐步取代手动对象创建来改进我们的旧(非DI)项目


因此,如何将
C
迁移到DI,而不必关心
A
B

如果您不想注入
C
,则可以调用您的容器来解析
C

C c = container.resolve(C.class);
或者您也可以在调用构造函数时插入
C

或者像你以前那样:

@Inject
private C c;
以下是CDI的一些示例代码:

通过使用以下方法解析所需对象:

UpdateCustomerController=(controller)BeanProvider.getContextualReference(“updateController”,false)


保持对构造函数的直接调用(没有字节码操作)无法做到这一点

下面是一种半自动地将代码重构为您可能需要的代码的方法

通常的IDE允许您使用构造函数创建/重构工厂方法。进行重构后,对
newc()
的所有调用都将转换为
C.createInstance()
(或调用工厂方法的任何内容)


然后更改工厂方法,从依赖项注入框架中实际解析C。

您已经在做一些事情来实现DI,对吗?你在干什么?为什么不能@C;如果您使用“新”DI注入创建实例,当然不再需要works@kuhajeyan当然不是。但我的问题是,是否有一些策略可以逐步迁移(从C开始),但我的“旧代码”(我不想接触的行)确实使用了
newC()
。因此,我需要一种注入C的方法,而不涉及CIf的创建。如果您想在重构之前进行部分操作,您可以让
C
保持原样,只需像您的示例中那样更改类
C
。没有触摸比你使用。您使用的是哪种依赖项注入?@k\u wave如果您不想触碰
C
的创建,您可以使用上面给定的代码,让
D
C
的构造函数中的容器创建。