300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 001.Spring | 依赖注入原理分析

001.Spring | 依赖注入原理分析

时间:2021-02-20 02:44:39

相关推荐

001.Spring | 依赖注入原理分析

下面谈谈Spring是如何实现反转模式IoC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A

public class A {public void m1() {System.out.println(this.getClass().getName()+":Hello");}}复制代码

如果我们在 B中调用A,那么如下代码:

package com.os.test;//B类中使用A类public class B {//B类中调用A类//每一次执行invoke方式,都生成一个A的对象,如果//A对象代码比较长,挺费时费力public void invoke() {A a = new A();a.m1();}}复制代码

每次执行invoke方法时,都要生成一个A对象,如果A对象代码较长,这是费时的事情。于是有如下写法:

package com.os.test;//C类中使用A类public class C {//A类变成了C类中的属性,但是我不想立即对A进行实例化操作//我们想通过外界传入A对象,涉及到了涉及模式private A a = new A();//不准直接进行初始化操作public void invoke() {a.m1();}}复制代码

将A对象变成C的类属性。 如果我们不想在C中实现A的实例,也就是不想立即new A(),而是想通过外界传入, 注意,如果你想知道为什么,这里涉及到设计模式以及解耦等因素,进一步感兴趣者可学习 23 种设计模式。

如果想让A的实例从外界传入,有两种写法:

构造方法

package com.os.test;//D类中使用A类public class D {private A a ;//我需要给a进行初始化操作public D(A a) {//构造方法进行赋值==注入this.a = a;}public void invoke() {a.m1();}}复制代码

setter方式

package com.os.test;//F类中使用A类public class F {private A a ;//我需要给a进行初始化操作public void invoke() {a.m1();}public void setA(A a) {//注入this.a = a;}}复制代码

上述两种写法在编程中是经常发生的,D(或F)作为调用者,A是被调用者,A的实例化不在调用者D(或F)内部中完成,而是通过构造函数或setXXX方法赋值进来,这种方式我们称为依赖性注入(DI 或者 IoC 模式),D(或F) 和A 的依赖联系是通过构造函数或setXXX 方法赋值进来,这样, 最大程度解耦了调用者D(或F)和被调用者A之间的耦合联系。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。