为什么我们需要Spring框架?[已关闭]
嗨,我是String的新手,正在阅读Martin Fowler的文章:http://martinfowler.com/articles/injection.html
他举了一个例子,MovieLister使用MovieFinder来查找电影。在此示例中,他首先提供了代码:
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插件的事实已经足够明显,以至于我们可能首先创建不必要的东西,不是吗?