Java POJO中断依赖注入
独立于使用的DI框架——对象链中的单个POJO总是破坏DI机制 伪代码示例: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,而不必关心
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
的构造函数中的容器创建。