Spring框架的依赖注入DI的基础案例

DI Dependency Injection ,依赖注入
is a :是一个,继承。
has a:有一个,成员变量,依赖。
例子:

    class Teacher { 
     private Phone phone; //Teacher 类依赖Phone 类
     ...
     public Teacher(){	
     this.phone = new Phone();
     } 

}
这段代码可以发现这样几个问题:
(1)当我想要改变Phone的生成方式,例如用new Phone(String name);来初始化Phone,这时候我就要改变Teacher的代码块了。
(2)如果想测试不同 Phone对象时,对 Teacher的影响很大,因为 Phone的初始化被写死在了 Teacher的构造函数中;
依赖注入 上面将依赖在构造函数中直接初始化是一种 Hard init 方式,弊端在于两个类不够独立,不方便测试。我们还有另外一种 Init 方式,如下:

public class Teacher {

Phone phone;

public Teacher (Phone phone) {
this.phone= phone;
}
}

上面代码中,我们将 phone对象作为构造函数的一个参数传入。在调用 Teacher 的构造方法之前外部就已经初始化好了 phone对象。像这种非自己主动初始化依赖,而通过外部来传入依赖的方式,我们就称为依赖注入。
现在我们发现上面 1 中存在的两个问题都很好解决了,简单的说依赖注入主要有两个好处:
(1). 解耦,将依赖之间解耦。
(2). 因为已经解耦,所以方便做单元测试,尤其是 Mock 测试。
依赖:一个对象需要使用另一个对象
注入:通常有3种注入方式,上面的是构造函数注入还有接口注入、方法注入,例如通过setter方法进行另一个对象实例设置。

1、目标类
创建BookService的接口和实现类
创建BookDao的接口和实现类
编写xml文件
编写测试类

BookDao的接口和实现类
在这里插入图片描述
在这里插入图片描述

BookService的接口和实现类
在这里插入图片描述
在这里插入图片描述
xml文件
在这里插入图片描述
测试
在这里插入图片描述
结果
在这里插入图片描述
在这里插入图片描述

发布了27 篇原创文章 · 获赞 1 · 访问量 1229

猜你喜欢

转载自blog.csdn.net/qq_40484416/article/details/102480911