「Spring认证」Spring 依赖注入
寂寞的心情wang 发布于2021-08-26 浏览:996 回复:1
0
收藏

每个基于 Java 的应用程序都有一些对象,它们协同工作以呈现最终用户所看到的工作应用程序。在编写复杂的 Java 应用程序时,应用程序类应尽可能独立于其他 Java 类,以增加重用这些类的可能性,并在单元测试时独立于其他类进行测试。依赖注入(或有时称为连接)有助于将这些类粘合在一起,同时保持它们的独立性。

假设您有一个具有文本编辑器组件的应用程序,并且您想要提供拼写检查。你的标准代码看起来像这样 -

public class TextEditor {
private SpellChecker spellChecker;

public TextEditor() {
spellChecker = new SpellChecker();
}
}
我们在这里所做的是,在 TextEditor 和 SpellChecker 之间创建一个依赖项。在控制反转的情况下,我们会做这样的事情 -

public class TextEditor {
private SpellChecker spellChecker;

public TextEditor(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
}
在这里,TextEditor 不应该担心 SpellChecker 的实现。SpellChecker 将独立实现,并在 TextEditor 实例化时提供给 TextEditor。整个过程由 Spring 框架控制。

在这里,我们从 TextEditor 中删除了完全控制权并将其保留在其他地方(即 XML 配置文件),并且依赖项(即类 SpellChecker)通过Class Constructor注入到类 TextEditor 中。因此,控制流已被依赖注入(DI)“反转”,因为您已经有效地将依赖委托给了某个外部系统。

注入依赖项的第二种方法是通过TextEditor 类的Setter 方法,我们将在其中创建 SpellChecker 实例。此实例将用于调用 setter 方法来初始化 TextEditor 的属性。

因此,DI 存在于两个主要变体中,以下两个子章节将通过示例涵盖它们 -

不。
依赖注入类型和描述
1
基于构造函数的依赖注入当容器调用带有多个参数的类构造函数时,基于构造函数的 DI 就完成了,每个参数代表对另一个类的依赖。
2
基于 Setter 的依赖注入基于 Setter 的 DI 是通过容器在调用无参数构造函数或无参数静态工厂方法来实例化 bean 后调用 bean 上的 setter 方法来完成的。
您可以混合使用基于 Constructor 和 Setter 的 DI,但使用构造函数参数作为强制依赖项和 setter 作为可选依赖项是一个很好的经验法则。

使用 DI 原则,代码更清晰,当对象提供依赖项时,解耦更有效。该对象不查找其依赖项,也不知道依赖项的位置或类,而是由 Spring 框架处理所有事情。

收藏
点赞
0
个赞
共1条回复 最后由墜廝窗畝中誠浦回复于2021-10-20
#2墜廝窗畝中誠浦回复于2021-10-20

http://www.imdb.com/list/ls506447669/
http://www.imdb.com/list/ls506447922/
http://www.imdb.com/list/ls506441087/
http://www.imdb.com/list/ls506441365/
http://www.imdb.com/list/ls506441413/
http://www.imdb.com/list/ls502042929/
http://www.imdb.com/list/ls502042851/
http://www.imdb.com/list/ls502042837/
http://www.imdb.com/list/ls502042885/
http://www.imdb.com/list/ls502044033/
http://www.imdb.com/list/ls502827943/
http://www.imdb.com/list/ls502827868/
http://www.imdb.com/list/ls502821037/
http://www.imdb.com/list/ls502821593/
http://www.imdb.com/list/ls502821104/
http://www.imdb.com/list/ls502821224/
http://www.imdb.com/list/ls502823007/
http://www.imdb.com/list/ls502823794/
http://www.imdb.com/list/ls502823890/
http://www.imdb.com/list/ls502301993/
http://www.imdb.com/list/ls502301812/
http://www.imdb.com/list/ls502301890/
http://www.imdb.com/list/ls502303073/
http://www.imdb.com/list/ls502303048/
http://www.imdb.com/list/ls502306057/
http://www.imdb.com/list/ls502306062/
http://www.imdb.com/list/ls502306543/
http://www.imdb.com/list/ls502306732/
http://www.imdb.com/list/ls502306743/
http://www.imdb.com/list/ls502306135/

http://github.com/wevdh
http://github.com/tffdj
http://github.com/tednc
http://github.com/ztsbj
http://github.com/ergdf
http://github.com/fdnncv
http://github.com/etgnnm
http://github.com/efbdbb
http://github.com/exbdgn
http://github.com/regdhf
http://github.com/atnjhi
http://github.com/erbdjk
http://github.com/xrfgyb
http://github.com/qdbhk
http://github.com/ilosbf
http://ccfdap.wikidot.com/
http://xmadw.wikidot.com/
http://szhen88.wikidot.com/
http://hzp66.wikidot.com/
http://tjfap9.wikidot.com/
http://tjkap6.wikidot.com
http://tianj20.wikidot.com
http://xmazx.wikidot.com/
http://xmcsw.wikidot.com
http://xmaer.wikidot.com
http://xmkdp.wikidot.com
http://xadp.wikidot.com/
http://wuhpp.wikidot.com/
http://xadkpp.wikidot.com/
http://xahakp.wikidot.com/
http://wuhakp.wikidot.com/
http://31kjw.wikidot.com/
http://32kjw.wikidot.com/
http://34kjw.wikidot.com/
http://35kjw.wikidot.com/
http://33kjw.wikidot.com/
http://suz16.wikidot.com/
http://xafaa.wikidot.com/
http://syfwe.wikidot.com/
http://fuziap.wikidot.com/
http://sjz00.wikidot.com/
http://xad213.wikidot.com/
http://wuha63.wikidot.com/
http://sza3.wikidot.com/
http://sjzf9.wikidot.com/
http://sjzsa4.wikidot.com/
http://sjz65.wikidot.com/
http://zzziap.wikidot.com/
http://cskip.wikidot.com/
http://zzjiap.wikidot.com/
http://ccaip.wikidot.com/

0
TOP
切换版块