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

时间:2011-06-01 19:45:51

标签: java spring dependency-injection

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

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

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

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

我似乎有点迷失,任何清晰度,概述或一些指导都会非常感激。

提前致谢!

4 个答案:

答案 0 :(得分:4)

我会试着简单地说:

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

您不需要将DI用于CSV行抽象。获得文件后,当您开始解析文件时,您的代码可以随时创建CSVRow。你不需要连接它们。

如果你愿意,你当然可以。您可以获取applicationContext并按名称获取bean。如果CsvRow具有您希望Spring为您管理的依赖项,您可能希望这样做。

答案 3 :(得分:1)

我认为Spring是创造“单身人士”的一种方式。当我想保证应用程序中只有一个类的实例时,使用Spring来创建它。但是,它不是一个具有静态INSTANCE字段或类似字段的传统单例,而是一个POJO,它包含您需要的任何构造函数/ setter。 Spring会在运行时为您创建实例,并确保只创建一次。