为什么依赖注入需要另一种语言?

时间:2011-10-26 05:01:11

标签: java spring dependency-injection inversion-of-control

我很喜欢用Java编程,但对Spring来说还是比较新的。我一直在阅读有关控制依赖注入/反转(并在过去的几个月里使用Spring),但我无法弄清楚是否需要一种单独的语言(xml / spring)来实现它。

在Java中创建名为DependencyHandler的单例并使用相同的语言保存所有内容有什么问题?使用xml / Spring有什么好处?

5 个答案:

答案 0 :(得分:7)

依赖注入不需要单独的语言。

Spring是Java的框架,历史上需要在xml中进行配置。现在,您可以使用xml或java注释来配置它。

Google的Guice是一个简单的依赖注入框架,它具有Java中的所有配置。

答案 1 :(得分:3)

为了特定目的,自定义语言(在xml中)可能比Java更好,这可能是合理的原因。对于DI来说,原因很有弹性,事实上并非真正的原因。

来自快乐的Spring用户的无数证词,压倒性的原因是他们认为xml不是代码。他们厌倦了编写样板Java代码,他们很乐意切换到样板xml。这让他们感到高兴。

在经济问题上,人类是不理性的。我们拥有精心设计的系统,可以在圈子中转移资源,在无意义的浪费中找到舒适和安全。

但我认为快乐是最重要的事情,不过它可能是迟钝的。

答案 2 :(得分:2)

您也可以创建使用Java语法的依赖注入框架。例如,请查看Google Guice

答案 3 :(得分:0)

Spring只是在大型项目中管理依赖注入的简单方法。

但您可以在类上使用静态工厂方法注入依赖项:

public class Foo
{
    public Foo static mkFoo(/* dependencies */)
    {
        // assign dependencies to members
    }

    // ordinary class stuff
}

然后,只要您需要Foo.mkFoo(/*dependencies*/),就可以Foo。没有春天需要

  

在Java中创建一个名为DependencyHandler的单例并使用同一种语言保存所有内容有什么问题?

处理单个类中的所有依赖项将很快变得混乱,并将导致与所有其他类的耦合。但这不是在普通java中不处理DI的理由。

答案 4 :(得分:0)

我会特别回答XML的“好处”部分,尽管没有很多。

将配置与代码完全分开会从源中删除所有框架工件,这可能是有益的。

创建影响配置文件的工具链更容易(不可笑,但值得注意):属性加载/替换,配置感知GUI配置编辑器,文档生成等。

集中配置;而不是配置在代码库周围散布,它在一组文件(或单个文件)中。这不是一个只有XML的vitrue,它取决于事物的配置方式。

我认为某些类型的配置比其他配置更适合外部配置。我根据reqs,框架允许的内容以及框架如何处理配置方面来选择合适的内容。