一、注入外部 bean

如果你要引用外部 bean,就要先注入外部bean。比如常见的web项目中的service、dao 这2层,通过 service 去调用 dao,这个过程就叫引入外部 bean。

现在有从左至右的3段代码,分别是 service、dao、dao接口的实现类。
【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

现在想要在 service 中调用 dao 里的 update() 方法,用之前传统的方法,可以 new:

【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

现在通过XML配置文件进行操作,用法还是跟之前文章讲到的一样,只不过之前注入属性都是用的 String,现在注入的是对象。

1. service 中的操作

在 UserService 里创建 UserDao 类型的属性,生成 set 方法。

【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

2. 配置 bean 文件

新建了一个 bean2.xml 文件,在这里创建 service 和 dao 的对象,然后在 userServie 里注入 userDao 对象。
【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

  • name:是属性名称,就是上面在 UserService 创建的 UserDao 类型的属性 userDao。
  • ref:之前注入的时候用的是 value,现在注入对象用的 ref,值就是要引用的对象 bean 标签里 id,这里就是 userDaoImpl。

写一个测试代码,运行正确的话,应该可以看到 service 和 dao 这2层代码里的 print 输出。

【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

二、注入内部 bean 和级联赋值

内部bean:只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean。

实体类之间经常遇到 1对多关系,比如 部门 和 员工。 部门是 1,员工是多。如何表示这种关系?

1. bean 中的操作

新建2个类,分别是 员工类 Employee、部门类 Department,都有着自己的属性。

【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

员工是属于部门的,要表示这个关系,在员工类 Employee 里,加上部门对象 Department 类型的属性 department。

【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

2. 配置 bean 文件

新建一个 bean3.xml,这里也可以使用上述外部 bean的方式,不过下面使用的内部 bean 的写法,通过在对象属性里再嵌套一个对象。

【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

测试一下,在 Employee 类里增加一个 add()方法,在 Department 类里增加 toString() 方法打印。
【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

最后修改下测试方法,运行一下。
【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入外部bean、内部bean和级联赋值

结果打印出了,在xml里注入的值。

相关文章: