我正在研究Spring作为一个Web框架,但是我需要一些帮助来了解DI。
在运行时在容器中构造对象的概念是一个新概念。
我只是想知道这将如何反映在一个大型应用程序中,我是否会有一些模块正在进行更高度耦合的工作,或者是否应该在运行时初始化每个对象?
这对我来说似乎有点密集,我的意思是说例如我有一个CSV文件数据挖掘应用程序,每行删除数据 - 每行数据都封装在我自己的一个CSVRow
对象中进行处理管他呢。只要Excel文件可以上传到服务器,就会实例化这些对象。我不知道我需要创造多少?
我似乎有点迷失,任何清晰度,概述或一些指导都会非常感激。
提前致谢!
答案 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会在运行时为您创建实例,并确保只创建一次。