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

时间:2009-04-18 07:25:12

标签: java design-patterns dependency-injection

我是D.I.的忠实粉丝 我目前正在开发一个使用D.I.的不那么小的项目。到处
(经典而美丽的D.I. 手工)。

从我的观点来看,有以下优点:

  • 当你习惯了它时直观
  • 不会以负面方式影响可读性 (事实上,它变得更好)
  • 但最重要的是:如果我想测试部分或整个项目 对于某些接口的不同实现,我可以通过更改来实现 少数字符,而不是进行复杂的重构/重命名或其他变通办法。

但遗憾的是,我无法弄明白,D.I。可以与外国创建一起使用 对象以优雅的方式(没有一些框架,请记住, 我做D.I.用手)。

D.I。手动意味着:你将某些东西传递给c-tor 。 没有全球工厂或类似的,上帝保佑!

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

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

为什么“D.I.手工”必须表示“将某些东西传递给c-tor”?

你能这样做吗?

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

在春季依赖注入中,这将是通过属性注入,我不明白为什么这不能“手工”完成。

答案 1 :(得分:2)

JAXBContext不能使用factory method吗?您可以像使用构造函数一样将参数传递给它。如果那不能达到你想要的效果,那么在创建你的对象后,传统的setter注入(即调用context.setXyz(xyzInstance)方法)将会手动模拟spring等人自动执行的操作......

答案 2 :(得分:0)

众所周知,人们会使用getter injection来做到这一点。我不知道如何在luddite DI环境中这样做。