Spring中使用的依赖注入有什么意义?

时间:2013-10-14 20:06:14

标签: java spring spring-mvc dependency-injection

我已经阅读了Spring in Action一书几周,以了解Spring框架。我有大约2年的编程经验,主要是在java中,在Ruby和Python中存在一些分心。

在阅读了前几章之后,我并没有明白春季依赖注入的重要性。我期待着AHAAA时刻,但还没有体验到。我确定我错过了一些重要的东西。

为什么我要在xml中连接我的bean而不是用= new myclass();

以旧的方式实例化它们

我知道我可以通过构造函数args和属性在xml中连接bean,以及在spring中配置数据源,这样我就可以隐藏xml文件中的连接细节。但为什么?特别是在良好的软件设计方面,还有更多内容。有人可以解释这个大问题吗?

3 个答案:

答案 0 :(得分:12)

三个字:反转控制

简而言之: 一旦你即时消除“好老方法”,你就会创建紧密耦合,例如:你的控制器依赖于特定的模板引擎,你的实体在具体的数据库层上等等。这是你想要防止的东西以及依赖注入容器的位置(DIC)非常方便。它管理您的服务,只要那些实现相同的接口,您就不必再关心特定的实现了。

想象一个名为InMemoryLayer的简单存储层类,在需要时会被您实例化。现在,您希望将其切换为名为SuperSecretRemoteCloudLayer的新的开源github解决方案。通常,您现在可以在所选的IDE中点击“搜索和替换”,并将所有InMemoryLayer替换为SuperSecretRemoteCloudLayer。但那不是很方便而且非常错误,你为什么要手工做那些艰苦的工作呢? DIC可以为您完成,并且需要处理的是*Layer实现相同的接口(因此您的应用程序不会中断)。

答案 1 :(得分:5)

在你不得不以艰难的方式做事之前,你并不真正欣赏春天。在没有连贯框架的情况下维护多个大型项目的艰难方法。如果你有4个大企业级应用程序都有自己的方式来启动自己,并管理资源,你会很头疼。如果您知道每个应用程序都使用spring,那么只需查找应用程序上下文xml!这也使得为不同的环境和测试用例设置新的上下文非常容易,而且不会破坏你的代码库。

答案 2 :(得分:5)

Spring最重要的是依赖注入,而不是基于XML的配置。正如其他人所说,Spring已经摆脱了基于XML的配置。但DI是Spring的核心。

a-ha是DI提供了一种将组件链接在一起的不同模型。组件不是直接创建彼此(因此紧密耦合),而是停止这样做,而是从中心位置注入链接。事实证明,这有助于特别是测试和事务管理。