Spring03IOC容器——Bean管理XML方式

IOC操作Bean管理

什么是Bean管理?

之前我们的初始案例中就已经完成了对于对象的创建,但是如果我们想给对象注入初始属性应该怎么做呢?

Bean管理的两种操作方式

XML和注解(本节主要讨论XML管理)

1.创建对象

 注意第三点

如果在我们的测试里的属性里有一个有参构造会怎么样呢?

java里如果有了有参构造,没有声明无参构造,就默认无参构造不存在

 此时执行测试

2.注入属性

 传统的set注入属性方式

  传统的有参数注入属性方式

 

 两种方法都可以实现属性注入

其实在spring中实现注入也对应着两种,但是传统的需要在主函数里进行调用,如何用spring把它开始的属性注入呢?

Spring的set注入属性方式

 在xml文件里进行创建对象并且注入属性

 

 测试:
为了方便观测,在Book1类里面加上属性输出,看看是不是我们设置的初始值

 

 

成功

 Spring的有参构造注入属性方式

创建一个有参构造的带属性的类

  在xml文件里进行创建对象并且注入属性

但是我们上面知道,spring默认是无参构造,但是现在条件不满足了,应该怎么办?

使用constructor-arg标签就可以解决 

 constructor-arg还可以有index属性,就是索引值,如果是0就是有参构造第一个参数,1就是第二个.....................

测试

 成功

3.p名称空间注入

 之前我们注入属性需要多个property标签,在这个地方可以稍微简略一下

在配置文件中加入p名称空间

 此时我们注入的属性就可以写在bean标签里的属性了

以之前的book1为例子

 测试

 成功

但是此时的代码可读性不高,所以一般不使用

4.注入空值(null)和特殊符号

字面量:给属性设置的初始值就是属性的字面量

设置空值:

以BOOK1为例

 在property里再嵌套一个null标签即可

测试

 设置特殊字符:

以book1为例,设置属性值为“<anhui>”,如何做?

(1)通过转义字符

(2)把带特殊内容字符写入CDATA

测试

 

5.注入属性——外部bean

以下是项目结构

 

 

现在我们需要在service这个类里调用userdaoimpl里的update方法如何做?

原始方法

使用注入外部bean方法

我们可以在xml文件里创建两个对象,并且把userdao对象作为一个service的属性注入到service之中(使用set方法),所以现在的service代码应该是

等会注入成功之后直接调用自己的pravite的userdao属性的update方法就可以了

再通过xml文件进行注入

但是此时property标签里的内容应该变化了

 

 测试

成功

 

6.注入属性——内部bean

对这个例子进行构建

 

 

 如何给这个员工类里的属性通过内部bean注入属性值?

 也就是说,内部注入是指在property标签里再创建一个自己需要的bean标签,并且给这个bean标签对应的属性赋值

但是这种用法其实不多,因为代码可读性比较差

测试

toString方法是如果输出这个类,就输出return内的内容

 

 

 成功

 7.注入属性——级联赋值

其实在6中,我们已经完成了级联赋值,在emp需要dept的时候spring帮助我们创建,并且给dept的dname赋了一个值——anbaobu(这是在内部bean级联赋值)

外部bean如何级联赋值?

测试

成功

还有一种特殊的外部级联赋值方式

多加了一个dept,dname,这是指在外部引入了dept类之后,找到emp里的dept的dname属性并且赋值,那么怎么找到呢?

当然是使用get方法来找到,所以需要在emp里加入dept的get方法 

但是我感觉这种方法不好用,还是外部的方法可读性高一点

 8.注入属性——注入集合类型

注入数组,List,Map,Set类型属性

 在xml文件里如何表示?

 从上到下依次对应,其实结构大差不差

测试

在stu里写一个输出方法

 成功

那么问题来了

(1)可不可以向集合中设置对象并且注入到属性中?

(2)如果一个集合是许多属性的公共部分,可不可以在xml文件里进行抽取到一起和注入到不同的属性当中呢?

注入list集合类型,但是值是对象

 

 在xml文件中我们可以创建多个课程对象并且通过外部bean的方式注入到stu的课程对象集合属性中

注意:此时list标签内的格式需要使用ref

 测试:

 成功

把公共集合的注入部分提取出来

 如何把xml文件里的公共部分设置到book的lists之中?

使用utils名称空间

引用utils

 

 测试

 

 成功

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值