依赖、继承关系的探究。

一、继承

使用<parent>属性,选择继承哪个的id。

继承并不是面向对象中的继承,而只是配置上的继承。

不用继承时的xml:

运行结果:

那么问题来了,除了id不能相同以外,我们两个kami的配置基本上都是一样的,那么能不能把之前的配置拿过来使用呢?(配置之间的继承)

运行结果:

可以看到:

  1. kami2里面我没有配置class,但是spring依然找到了类,就是因为kami2继承了kami1里面class属性。
  2. alive因为配置了新的值,所以就覆盖了继承的值,但是dead没有配置,所以就继承了kami1里面的值。

那么新的问题来了,我能不能设置一个模板专门用来继承呢,这样不就很方便了吗?我希望这个模板是一个抽象bean,并不会被实例化。

完全没有问题,你需要的是abstract这个属性:

这样kami1就不能被实例化了,只能用于继承配置。

如果一个bean的class没有指定,那么bean必须是一个抽象bean。

这个比较好理解,如果class没有被指定,那么这个bean就无法执行,只能用于继承。而且abstract自身并不会被继承。

二、依赖

假如要求配置kami时,必须有一个关联的god,换句话说就是kami这个bean依赖于god这个bean,要怎么做?

spring允许用户通过depends-on属性设定bean前置依赖的bean,前置依赖的bean会在本bean实例化之前创建好。

如果前置依赖于多个bean,则可以通过逗号,空格,或的方式配置bean的名称。

运行结果:

我们发现god是没有的,因为我们没有配置god的属性。

加上一个depends-on会怎么样?

运行结果报错:

god没有被定义。

因为xie指定了依赖god,god没有被定义,那么xie是无法进行实例化的。

当我们加上god的bean的时候:

运行结果:

正确输出了xie。

name问题来了,为什么xie依赖着god,而且我们赋了值,但是god还是null?

这是因为我们还没在xie中配置god的映射。

依赖并不代表着映射,而是表示这个bean的正确初始化前需要提前初始化另一个bean,管你这个bean怎么配置,但是必须要有。

加上p:god-ref=”god”映射,这样就好了:

输出结果:

三、总结一下

继承很方便,依赖加条件。

发表评论

电子邮件地址不会被公开。 必填项已用*标注