POJO打破了依赖注入

时间:2016-07-18 09:45:39

标签: 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类中的new C()会破坏托管对象链。

我们目前正在尝试通过逐步替换使用DI机制创建手动对象来改进我们的旧(非DI)项目。

那么如何将C迁移到DI,甚至不关心AB

2 个答案:

答案 0 :(得分:1)

你不能保持对构造函数的直接调用(没有字节码操作)。

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

通常的IDE允许您从构造函数中创建/重构工厂方法。通过重构,对new C()的所有调用都将转换为C.createInstance()(或者调用工厂方法)。

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

答案 1 :(得分:0)

通常,如果您不想注入C,请致电您的容器以解决C

C c = container.resolve(C.class);

或者您也可以注入C,例如在调用构造函数时

或者像之前一样:

@Inject
private C c;

以下是CDI的一些示例代码:

https://jaxenter.de/cdi-geht-fremd-dependency-injection-fur-javase-5039

使用以下方法解决所需对象:

  

UpdateCustomerController controller = (Controller) BeanProvider.getContextualReference("updateController", false);