依赖注入有什么用_springMVC 学习(什么是依赖注入)

原文作者:编程大全

80a291f301d1adc89eaa741554e97a2f.png

Spring依赖注入

为变量赋值

今天我们来实现通过spring依赖注入来为类中的变量赋值。首先我新建一个Student.java和一个Teacher.java类,并且提供get和set方法

然后,我们在spring配置文件中来为这些属性赋值:

根据配置文件,我们可以发现,在bean中有个property的配置,其中name就是我要为那个属性赋值,对于属性的值,这里有两种情况:

1.如果是基本类型,直接在value中写上需要赋的值即可

2.如果是引用类型,那么需要使用ref来引用对应的类,对于这个栗子,即student这里ref所引用的student就是第一个student的bean中配置的id。

编写测试类

接下来,我编写一个测试类,来测试是否成功的为属性注入对应的值DiTest.java

此时打印结果如下:

teacherWang

studentName :haha==studentId :12

发现这个时候spring容器已经为我们的属性赋值成功了。然而我们却并没有像之前那样调用set方法,或者是构造方法,这里有一点需要说明,就是我们虽然没有自己调用set方法来为属性赋值,但是spring还是会掉用set方法,所以我们如果想对某一个属性进行依赖注入的话,那么我们就需要对该属性写上set方法。

为集合赋值

下面我们为teacher注入一些集合,首先需要做的就是在Teacher.java中声明list,set,map这三个属性,然后为这些属性生成set方法,新增属性如下:

然后再spring的配置文件中这样为其赋值:

可以发现这个配置文件写起来和普通的集合对象的形式是很相似的,这里我们都是用的基本的类型来作为集合的泛型,如果使用的是引用类型,这里的配置都有ref对应的属性,只需要将所需要引用的类对象的id写入到ref的值当中即可,举个栗子:

对于list和set如果泛型是引用类型,那么可以这样写:

而对于map如果类型是引用类型,可以这样写:

好了,是时候验证是否赋值成功了。IocTest.java

此时打印的结果如下:

58620c2bfd16b0c3e8398fd5e722b6c9.png

可以发现这个时候spring成功为所有的写了set方法的属性成功赋值了。好了上边的都是利用set方法来为属性赋值的,下面我们来利用构造方法来为属性赋值

利用构造方法赋值

我们写一个ClassInfo.java类:

可以看到此时我们声明了两个属性,一个基本类型的,一个引用类型的,并且书写了构造方法,这时我们就可以在spring配置文件中,利用构造方法来为属性赋值了,在bean的配置中有这样一个配置

顾名思义就是根据构造函数来为属性赋值的,说明一下这四个参数的意思:

index:该参数在构造方法中的位置,默认从0开始

type:该参数的类型

ref:如果该参数是引用类型时候的引用id

value:如果该参数是基本类型时候的值

知道了每个参数的意思,写起来就很简单了,我的ClassInfo.java对应的bean如下

编写测试代码:

此时会正确的答应出我们设置的信息,如下:

classInfo.getClassName():testConstructor

studentId:12==studentNamehaha

现在我们已经学会了如何在spring中为属性赋值,如之前所属,我们并没有调用set或者构造方法,却能成功为属性赋值,其实我们是把set方法的调用交给spring来处理了,那么依赖注入又有什么用呢?我们为什么要学习依赖注入?

还记得我在该篇最开始写了这样一句话:接口 对象 = new 接口实现类(); 这种方式是我们之前创建对象的方法。现在我举个栗子:

我新建一个接口BookRead然后建俩个类实现该接口:

如果我现在需要先用kindle来读书怎么办呢?按照之前的写法:

那么问题来了,如果我现在需要利用Phone来读书,那么我是不是需要重新new一个PhoneRead呢。这样做并不是我们要的面向接口编程。接下来我们使用spring的依赖注入来为其优化:

首先将两种读书方式的类,在spring容器中进行配置:

然后配置ReadBy对应的bean:

测试:

这里我为readBy注入的是kindleRead,因此这时候我调用readBy.read();方法应该是运行的kindleRead的readBook,其实这里已经做到了面向接口编程,就是我的readBy.read();不需要知道bookRead是什么类型,我只需要调用在read方法中调用bookRead.readBook();方法就可以了,具体以哪种方式来读书,我只需要在spring容器当中进行配置即可,这样做也使得代码更加容易维护。

好了,今天的springDi就学习到这里了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值