Spring依赖注入(1)

上一节提到的是让Spring帮我们创建Dao层的对象,但在我们的实际开发中也有web层业务层

我们先创建一个UserService的接口

在UserService接口中写入一个save方法,业务层的save调dao层的save

在demo目录下新建一个UserController充当web层,它的内部是要获得service

 

 这个环境就搭好了。但是这个环境是由问题的,问题在哪儿里呢?

 

将UserDao给UserService,那么是怎么给的呢?

我们可以这样想,我们把某个对象或者某个数据给另一个对象,那我们得调用那个对象的某个方法才能给它。

那我们怎样才能把一个对象设置到这个对象的内部

两种方法:

1.我们可以用UserService.set   UserDao有参构造方法 

 那么我们这个项目是谁需要谁的依赖注入,其实就是UserServ需要UserDao的依赖注入

 下面我们先演示set方法,既然我么要把Dao注入到我们Service,那么在Service里面要有一个set方法。

 

 

我们不用自己从容器中获得dao,因为从容器内部从set方法注入了

因为UserDao被注入了,所以userDao是有值的是可以直接调用save方法的

 

 我们要把userdao注入到service但是我么spring不知道,所以我们要在spring配置中告诉spring我们要在service中注入userdao

我们在bean标签里添加一个property标签 name代表但是属性名也就是set方法后面的成员变量但是首字母是小写的

 我们对象的引用用ref引用的是userdao

这里我们要是不使用容器来调用save方法就会报空指针错误

 也就是这部分的错误

 我么new出来的UserService对象里面并没有UserDao所以会报空指针异常

下面我们开一下p命名空间也就是把bean标签的子标签给省略掉了

 

 Bean依赖注入的第二种方法

构造方法方式:

 现在我们要用构造方法方式依赖注入,所以我们要告诉Spring我们使用哪种方式使用的

 如果是像以下那样什么都不写,那么默认是无参构造

 而无参构造没有UserDao

 这里的name是参数名

 而ref是引用bean标签的id名

我们发现这个是可以成功输出的

是因为配置时,创建对象时,我们通过注入的方式构造方法去接收给

userDao一个值,让它可以去调用方法。 

 下面看一下普通数据类型和集合数据类型的注入方式

1.我们先来看普通数据类型的注入方式(两种注入方式:set和构造)

我们在save方法里面加一句输出,要是打印出结果,那么就是注入成功了

 下一步就是告诉我们Spring该如何配置文件了

因为这是set方式注入所以我们要用property,又因为这是普通数据类型注入,所以不能用ref,而是用value。

下面讲一下Bean注入集合数据类型的注入方式

首先定义几个属性,并设置getter和setter方法

 

首先来配置一下spring文件,因为当时配置集合属性,所以property标签不能用value或者ref,

又因为这里配置的是list集合属性,所以我们可以用list标签,又因为strList集合是string类型是普通类型所以子标签用value

 在UserDao下的save方法测试一次结果

控制台显示成功

 下面测试一下map集合属性的注入方式

        同样是property标签,因为是map集合类型,,所以在其子标签中放入map标签,map标签中放入一个entry子标签 它的属性有key代表键,value代表值,key-ref代表键是一个引入,value-ref

代表的是值的引入,ref代表的是要在bean容器中存在。

 因为map集合的值是ref所以我们需要新建bean容器, 引用的对象就是User

因为对普通属性的引用,所以property的属性应该是value。

(key是map集合的键,叫啥都无所谓,value-ref代表的是对bean id的引用。)

 我们对User进行toString重写方法,在控制台输出测试,可以看到userMap也有值了

 最后来进行对property的引用(property本身键和值都是字符串)

对property的引用就是在其中放入子标签props和prop标签因为prop只有key属性,所以value就放在标签体中 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值