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. Linux宝塔面板FTP无法连接的解决办法,跳坑实例

    宝塔面板的ftp无法使用解决 先检查这些内容 1.注意内网IP和外网IP 2.检查ftp服务是否启动 (面板首页即可看到) 3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000 ...

  2. session与cookie区别与联系

    一.Session的概念 Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标 ...

  3. leetcode-mid-sorting and searching-162. Find Peak Element

    mycode  54.81% class Solution(object): def findPeakElement(self, nums): """ :type num ...

  4. ssd写入量剩余读写次数怎么查

    固态硬盘ssd写入量剩余读写次数怎么查 为什么要查固态硬盘的写入量呢,主要是因为闪存是有写入次数限制的,所以查次数就是看看寿命还有多少,说白了这是对耐久度的一点担忧.其实目前原厂出品的固态硬盘,即便是 ...

  5. flask + celery实现定时任务和异步

    参考资料: Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest ...

  6. Maven使用WEB-INF/lib下面的jar编译和打包

    在某些情况下,maven无法下载依赖的jar,或者依赖的m2会非常的大,上G那是随随便便的事.为了方便修改和编译,在打出的war包基础上,或者直接把tomcat的webapps下的项目拿出来,就可以用 ...

  7. 移动端自动化==>Windows-Android-Appium环境搭建

    第一步 安装JDK,本机如果带有1.7及以上版本且配置好了环境变量,则可忽略此安装步骤. JDK的安装包,百度下载即可.安装完成后配置环境变量. cmd下验证环境变量是否配置成功 第二步 安装Andr ...

  8. CSS3 基础

    style 标签 <style type="text/css"> h1 { font-size:12px; color:#F00; } </style> 行 ...

  9. 20191118 Spring Boot官方文档学习(4.8)

    4.8. RSocket RSocket参考 RSocket是用于字节流传输的二进制协议.它通过单个连接传递的异步消息来启用对称交互模型. Spring框架的spring-messaging模块在客户 ...

  10. 11g Oracle Rac安装(基于linux6)

    安装 Oracle 11gR2 RAC on Linux 6 本文介绍如何在Oracle Linux 6上安装2节点Oracle 11gR2 Real Application Cluster(RAC) ...