java - Spring中使用的依赖注入(inject)有什么意义?

标签 java spring spring-mvc dependency-injection

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

在阅读了前几章之后,我并没有完全明白 Spring 中的依赖注入(inject)有什么大不了的。我期待一个 AHAAA 时刻,但还没有完全体验到。我确定我错过了一些重要的东西。

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

以旧的方式实例化它们

我知道我可以通过构造函数参数和属性在 xml 中连接 bean,也可以在 spring 中配置数据源,以便我可以在 xml 文件中隐藏连接详细信息。但为什么?这还有更多,尤其是在良好的软件设计方面。有人能解释一下大事吗?

最佳答案

三个字:控制反转

简而言之: 一旦你实例化“好的旧方法”,你就会创建紧密耦合,例如:你的 Controller 依赖于一个特定的模板引擎,你的实体在一个具体的数据库层上,等等。这就是你想要防止的事情以及依赖注入(inject)容器的位置(DIC) 非常方便。它管理您的服务,您不必再关心具体的实现,只要它们实现相同的接口(interface)即可。

想象一个名为 InMemoryLayer 的简单存储层类,您可以在需要时对其进行实例化。现在你想把它换成一个很棒的新的开源 github 解决方案,叫做 SuperSecretRemoteCloudLayer。通常,您现在会在您选择的 IDE 中点击“搜索和替换”,并将所有出现的 InMemoryLayer 替换为 SuperSecretRemoteCloudLayer。但这不是很方便而且很容易出错,你为什么要手动完成所有这些艰苦的工作呢? DIC 可以为您和所有 做这件事,这两个 *Layer 都实现了相同的接口(interface)(因此您的应用程序不会中断)。

关于java - Spring中使用的依赖注入(inject)有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19368378/

相关文章:

spring-boot:自动配置事务管理器

java - Spring AOP 与 SPring MVC Controller 不工作

java - 选取随机数组元素

java - CommandLineRunner 中的依赖注入(inject)失败

java - 如何在 Win10/Tomcat7/Java7 上从 Web 应用程序启用 TLSv1.1+ 出站通信?

spring - Spring Batch 和 Spring Cloud Deployer kubernetes 中的 Worker pod 资源限制

java - Spring security Role 无法转换为授权权限

java - 如何在Java中输入def注解

java - 如何在 Spring 中将 JdbcTemplate 转换为 Flux?

java - 使用 DefaultAnnotationHandlerMapping 进行 Spring @EnableWebMvc 配置