繁体   English   中英

spring 应用程序的各个方面的依赖注入?

[英]Dependency Injection in every aspect of a spring app?

我正在研究 Spring 作为 web 框架,但是我需要一些帮助来了解 DI。

在运行时在容器中构建对象的概念是一个新概念。

我只是想知道这将如何反映在一个大型应用程序中,我是否会有一些模块在做耦合度更高的工作,或者每个 object 是否应该在运行时初始化?

这对我来说似乎有点密集,我的意思是说,例如我有一个 CSV 文件数据挖掘应用程序,它删除每行的数据 - 每行数据都封装在我自己的一个CSVRow对象中进行处理或其他任何东西。 每当 Excel 文件可能上传到服务器时,这些对象就会被实例化。 我不知道我需要创建多少?

我似乎有点迷失了,任何清晰度,概述或一些指导将不胜感激。

提前致谢!

我将尝试简单地说:

  • 对具有逻辑(业务逻辑、持久性逻辑、前端逻辑)的无状态类使用依赖注入
  • 对值对象使用new

从广义上讲,应用程序由实现业务逻辑的类的集合组成。
通常每个 object 负责获取它需要的对象的引用(以及该对象的依赖项)。
我认为这很明显会导致:
1) 紧耦合类
2) 代码难以测试,因为每个 object 都会实例化它所依赖的特定类,如果需要更改,则必须修改代码。
因此,使用依赖注入对象不会实例化依赖对象本身,而是“外部组件”在 object 创建时提供依赖项,即将依赖项注入对象。
因此,在您的示例中,您的想法是您可以拥有例如由 Spring (及其所有依赖项)实例化的 CsvRow object,并在需要时获得 object。 也可以通过更改配置来切换到例如 CsvRow2 object(另一种实现)

您不需要为 CSV 行抽象使用 DI。 获得文件后,当您开始解析它时,您的代码可以随时创建 CSVrow 内容。 您无需将它们连接起来。

如果你愿意,你当然可以。 您将获取您的 applicationContext 并按名称获取 bean。 如果 CsvRow 具有您希望 Spring 为您管理的依赖项,您会想要执行此操作。

我认为 Spring 是一种创建“单例”的方式。 当我想保证应用程序中只有一个 class 实例时,请使用 Spring 创建它。 但是,它不是带有 static INSTANCE字段或类似字段的传统 singleton,而是带有您需要的任何构造函数/设置器的 POJO。 Spring 在运行时为您创建实例,并确保创建只发生一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM