我已经阅读了Spring in Action一书几周,以了解Spring框架。我有大约2年的编程经验,主要是在java中,在Ruby和Python中存在一些分心。
在阅读了前几章之后,我并没有明白春季依赖注入的重要性。我期待着AHAAA时刻,但还没有体验到。我确定我错过了一些重要的东西。
为什么我要在xml中连接我的bean而不是用= new myclass();
我知道我可以通过构造函数args和属性在xml中连接bean,以及在spring中配置数据源,这样我就可以隐藏xml文件中的连接细节。但为什么?特别是在良好的软件设计方面,还有更多内容。有人可以解释这个大问题吗?
答案 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提供了一种将组件链接在一起的不同模型。组件不是直接创建彼此(因此紧密耦合),而是停止这样做,而是从中心位置注入链接。事实证明,这有助于特别是测试和事务管理。