Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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:外部构造对象的依赖注入?_Java_Design Patterns_Dependency Injection - Fatal编程技术网

Java:外部构造对象的依赖注入?

Java:外部构造对象的依赖注入?,java,design-patterns,dependency-injection,Java,Design Patterns,Dependency Injection,我是D.I.的超级粉丝。 我目前正在开发一个不太小的项目,它在任何地方都使用D.I. (手工制作的经典而美丽的D.I.) 在我看来,有以下优点: 当你习惯它时,它是直观的 不会以负面方式影响可读性 (事实上,它变得更好) 但最重要的是:如果我想测试部分或整个项目 对于某些接口的不同实现,我可以通过更改 少几个字符,而不是执行复杂的重构/重命名或其他解决方法 但是,遗憾的是,我不知道如何将D.I.与外国公司一起使用 以优雅的方式创建对象(记住,没有一些框架, 我用手做身份证) D.I.用手的意

我是D.I.的超级粉丝。
我目前正在开发一个不太小的项目,它在任何地方都使用D.I.
(手工制作的经典而美丽的D.I.

在我看来,有以下优点:

  • 当你习惯它时,它是直观的
  • 不会以负面方式影响可读性 (事实上,它变得更好)
  • 但最重要的是:如果我想测试部分或整个项目 对于某些接口的不同实现,我可以通过更改 少几个字符,而不是执行复杂的重构/重命名或其他解决方法
但是,遗憾的是,我不知道如何将D.I.与外国公司一起使用 以优雅的方式创建对象(记住,没有一些框架, 我用手做身份证)

D.I.用手的意思是:你把某物传给指挥官。 没有全球性的工厂或类似的,上帝禁止

例如,JAXB自己创建对象。没有办法 告诉JAXBContext:“请使用以下参数创建我的 对象”。JAXB只接受无参数的c-TOR


有什么想法吗?

大家都知道有人这样做。我不知道如何在luddite DI环境中做到这一点。

JAXBContext是否使用了一个?您可以像传递构造函数一样将参数传递到该函数中。如果这不能满足您的需要,那么在创建对象后,传统的setter注入(即调用
context.setXyz(xyzInstance)
方法)将手动模拟spring等人自动执行的操作…

为什么“手动D.i.必须意味着“将某些内容传递给c-tor”

你能这样做吗

ThingOne one = new ThingOne();
one.setInjectedItem( a );
one.setOtherInjectedItem( b );

在spring依赖项注入中,这将是通过一个属性进行的注入,我不明白为什么不能“手工”完成这项工作。

+1我会选择建议的任何一种@ivan如果您仍然对调用它的代码行感到不舒服,请将它们打包并将代码移到其他地方。这是一个限制,你必须在某个时候处理它。我也不知道java是否允许,但在.net中,您可以通过反射调用已实例化对象的构造函数。