嗨,我是 String 新手,正在阅读 Martin Fowler 的文章:http ://martinfowler.com/articles/injection.html
他给出了一个使用 MovieFinder 来查找电影的 MovieLister 示例。在这个例子中,他首先提供了代码:
class MovieLister...
private MovieFinder finder;
public MovieLister() {
finder = new ColonDelimitedMovieFinder("movies1.txt");
}
}
他指出,你不能将 MovieLister 提供给你的朋友重复使用,除非你的朋友使用相同的 MovieFinder 实现并将电影放在同一个 txt 文件中。
是的,当然,这不是您编写组件并希望有人可以重用它的方式。相反,随着他的进步,你应该写:
class MovieLister...
public MovieLister(MovieFinder finder) {
this.finder = finder;
}
}
是的,这样更好。现在您的朋友可以接管您的 MovieLister 并插入他自己的代码。对我来说,故事是完整的。我错过了为什么你需要一个 Spring 框架来注入依赖项。通过您朋友的代码将依赖项注入到 MovieLister。句号。所有 Spring 设置等价于简单地实现 MovieFinder 接口并进行这样的调用:
MovieFinder myMovieFinder = new MyMovieFinderImpl();
MovieLister myMovieLister = new MovieLister(myMovieFinder);
简单,轻松。我知道您在代码中对 MyMovieFinderImpl 实例的创建进行了硬编码。但是,将它转移到 XML 中并带来这么多其他东西有什么意义呢?从什么时候程序员变得如此害怕编译代码并更喜欢在不编译的情况下更改 XML 来完成所有工作?我很抱歉,但我想我只是错过了重点。几十年前,每个程序都使用依赖注入。但在过去,依赖是由程序使用库、DOS 命令行或 GUI 注入的。为什么现在我们需要另一种方式来注入依赖?
谢谢你。
更新:
好吧,你们中的许多人都提出了注释。在我对 Spring 的浅薄理解中,我可能觉得使用 XML 比使用注解更舒服。至少有一个中心位置以更容易理解的方式列出依赖关系。有了注释,就没有这样的中心位置。相反,只是魔术发生了。想知道传入的参数是什么?自己去弄清楚,祝你好运。是的,我知道有智能 IDE 插件可以帮助浏览代码。但是,为什么我们一开始就让一件事情变得复杂,然后庆祝另一件让我们的生活更轻松的事情呢?注释使代码更难浏览和理解,因此人们为此创建 IDE 插件这一事实是显而易见的,以至于我们可能会首先创建不必要的东西,不是吗?