1.前言

不同的Bean之间存在两种关系:继承和依赖,这里的继承与java中的继承不同,它指的是配置上的继承。

2.继承bean配置

Spring允许继承bean的配置,被继承的bean成为父bean,继承这个父bean的Bean称为子bean,继承bean主要有以下几个特点:

1)子Bean从父Bean中继承配置,包括Bean的属性配置

2)子Bean也可以覆盖从父Bean继承过来的配置,如父bean设置name为zhangsan,子Bean中可以把name的值覆盖为Lisi.

3)父Bean可以作为配置模板,也可以作为Bean实例,若只想把父Bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个Bean并不是<bean>元素里的所有元素都会被继承,比如autowire,abstract等

4)也可以忽略父Bean的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstract必须设置为true。

5)  一个abstract属性为true的bean是不会被容器实例化的,它是一个抽象Bean。

具体配置文件:

 <!--抽象bean不能被IOC容器实例化,只用来被继承配置 abstract="true",如果一个bean没有指定class那么它必须是一个抽象bean-->
<bean id="address" class="com.wzy.autowire.Address" p:city="BeiJing" p:street="HuangLongGuan" abstract="true"/> <!--bean配置的继承:当两个bean的配置几乎一样,使用bean的parent属性继承哪个bean的配置-->
<bean id="address2" p:street="WuDaoKou" parent="address"/> <bean id="car" class="com.wzy.autowire.Car" p:brand="AUDI" p:price="300000"/>

3.依赖Bean配置

Spring允许用户通过depends-on属性设定Bean前置依赖的bean,前置依赖的bean会在本Bean实例化之前创建好。如果前置依赖于多个Bean,则可以通过逗号、空格的方式配置Bean的名称。

具体配置文件:

 <!--要求在配置Person时,必须有一个关联的car!换句话说person这个bean依赖于Car这个bean-->
<bean id="person" class="com.wzy.autowire.Person" p:address-ref="address2" p:name="wzy" depends-on="car"/>

总结:depends-on适用于表面上看起来两个bean之间没有使用属性之类的强连接的bean,但是两个bean又确实存在前后依赖关系的情况,使用了depends-on的时候,依赖他人的bean是先于被依赖bean销毁的,相比于ref属性,ref表示的bean是与当前bean之间是有关联的,是需要注入当前bean的属性中的,而depends-on是将两个bean进行强关联,来保证创建和销毁的顺序。

Spring基础10——Bean之间关系的更多相关文章

  1. Spring初学之bean之间的关系和bean的作用域

    一.bean之间的关系 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  2. Spring -- Bean自己主动装配&amp;Bean之间关系&amp;Bean的作用域

    对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...

  3. Spring基础篇——bean的自动化装配

    上篇博文讲Spring的IOC容器时说道,虽然容器功能强大,但容器本身只是个空壳,需要我们主动放入装配对象,并告诉它对象之间的协作关系,然后容器才能按照我们的指示发挥它的魔力,完成装配bean的使命. ...

  4. Spring基础14——Bean的生命周期

    1.IOC容器中的Bean的生命周期方法 SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务.SpringIOC容器对Bean的生命周期进行管理 ...

  5. Spring基础11——Bean的作用域

    1.Bean的作用域种类 Spring中的bean的作用域分为四种:singleton.prototype.session.request,后两种很少使用,下面我们主要来学习前两种 2.singlet ...

  6. spring bean之间关系

    ByeService.java package com.service; public class ByeService { public String sayBye() { return " ...

  7. Spring基础09——Bean的自动装配

    1.XML配置的Bean自动装配 SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,而不需要手工去指定要装配的Bean,a ...

  8. Spring基础(7) : Bean的名字

    1.普通bean是用id标志,context.getBean时传入名称即可获得. <bean id="p" class="com.Person"/> ...

  9. Spring基础(4) : bean重写

    @Configuration public class Config1 { @Bean() public Person getP(){ Person p = new Person(); p.setNa ...

随机推荐

  1. [BZOJ2987]Earthquake:类欧几里得算法

    分析 类欧的式子到底是谁推的啊怎么这么神仙啊orz! 简单说一下这道题,题目中的约束条件可以转化为: \[ y \leq \frac{c-ax}{b} \] 有负数怎么办啊?转化一下: \[ y \l ...

  2. (转)搭建自己的Nuget服务器

    转:https://www.cnblogs.com/knowledgesea/p/5500954.html 序言 你们公司有没有好多项目,有没有好多类库,你们的类库是在tfs中管理,还是svn或者gi ...

  3. 详解设备PID和VID

    根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备. VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向 ...

  4. oracle 查看并行sql语句的并行数量和如何开并行

    1.执行sql:select /*+ parallel(a,4) */ * from tf_f_user a where rownum<100000; 2.如何查看该sql语句的并行数量: se ...

  5. ftp4j揭示java.net.SocketException: Connection reset的解决

    ftp4j提示java.net.SocketException: Connection reset的解决系统的自动更新FTP服务器,其他计算机连接都没有问题,包括xp.server2008.win7. ...

  6. Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm

    Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...

  7. shims-vue.d.ts 解析

    TypeScript的文档看起来比较让人匪夷所思 TS是从2012年就开始的项目,那时ES6的模块化还没有成为继定标准,所以今天来看TS中一些名词让人匪夷所思,其实都是历史遗留问题 比如namespa ...

  8. 【Hibernate】---【注解】一对一

    一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-con ...

  9. linux 进程间共享内存示例

    写入端: #include <iostream> #include <unistd.h> #include <stdlib.h> #include <stdi ...

  10. 别把&和nohup混为一谈, 根本不是同一个东西好不好 ------ 聊聊./a.out & , nohut ./a.out , nohup ./a.out &的区别

    在第一家公司工作的时候, 我认识了&,在第二家公司工作的时候, 我认识了nohup,  这就是渊源.  随后, 我就一直糊涂用他们, 但并不懂这两个东西. 网上很多地方是乱扯, 瞎复制, 为什 ...