Bean之间主要有继承和依赖的关系,这里的继承并不是我们面向对象里面所提到的继承。

继承

我们先来创建一个新的配置文件beans-relation.xml

  1. <bean id="address" class="com.figsprite.bean.autowire.Address"  
  2.       p:city="福州" p:street="闽侯"/>  
  3. <bean id="address2" class="com.figsprite.bean.autowire.Address"  
  4.       p:city="福州" p:street="晋江"/> 

    在Main.java测试一下有没有问题:

  5. ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");  
  6.     
  7. Address address = (Address)ctx.getBean("address");  
  8. Address address2 = (Address)ctx.getBean("address2");  
  9.     
  10. System.out.println(address);  
  11. System.out.println(address2);  

    现在咱们看看这两个Address容器,大部分的属性配置是一样的,所以我们就想,在id="address2"中能不能只配id和p:street,其他的就用之前id="address"配置好的呢?这就是标签之间的继承关系,可以用到parent属性

  12. <bean id="address" class="com.figsprite.bean.autowire.Address"  
  13.       p:city="福州" p:street="闽侯"/>  
  14. <bean id="address2" p:street="晋江" parent="address" />  

    输出也是没有问题的:

    Address{city='福州', street='闽侯'}

    Address{city='福州', street='晋江'}

    针对继承Bean配置我们需要注意一下几点:

  • 子Bean从父Bean中继承配置,包括Bean的属性配置。
  • 子Bean也可以覆盖父Bean继承过来的配置。
  • 父Bean可以作为配置模板,也可以作为Bean实例。如果只想把父Bean作为模板,可以设置<bean>的abstract属性为true,这样Spring不会实例化这个Bean。
  • 不是<bean>元素里面的所有属性都会被继承,比如autowire,abstract等
  • 可以忽略父Bean中的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstract必须为true,也可以这么说若某个bean的class属性没有指定,则该bean必须是一个抽象bean

依赖

我们来定义一个person容器对象,若现在有个新要求,要求Person,必须要有一个关联的Car即Person依赖于Car这个bean

  1. <bean id="car" class="com.figsprite.bean.autowire.Car"  
  2.        p:brand="奥迪" p:price="233"/>  
  3.     
  4.     
  5.  <bean id="person" class="com.figsprite.bean.autowire.Person"  
  6.        p:name="小明" p:address-ref="address2" depends-on="car"/>  

Spring允许用户通过depends-on属性设定Bean前置依赖的Bean,这个前置依赖的Bean'会在本Bean的实例化前创建好,如果前置依赖于多个Bean,则可以通过逗号隔开,

上面的例子中虽然打印出来的car属性依旧是空值,不过如果我们删去<bean id="car">就会报错

Bean之间的关系的更多相关文章

  1. [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Spring Bean之间的关系

    bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括 ...

  3. Spring(九):Spring配置Bean(二)自动装配的模式、Bean之间的关系

    XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,模式包含:byType,byName, ...

  4. 峰Spring4学习(5)bean之间的关系和bean的作用范围

    一.bean之间的关系: 1)继承: People.java实体类: package com.cy.entity; public class People { private int id; priv ...

  5. 3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/

    1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 -& ...

  6. Spring学习--Bean 之间的关系

    Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...

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

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

  8. XML配置里的Bean自动装配与Bean之间的关系

    需要在<bean>的autowire属性里指定自动装配的模式 byType(根据类型自动装配) byName(根据名称自动装配) constructor(通过构造器自动装配) 名字须与属性 ...

  9. Spring_自动装配 & bean之间的关系 & bean的作用域

    1.自动装配 beans-autowire.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...

  10. Spring基础——在 IOC 容器中 Bean 之间的关系

    一.在 Spring IOC 容器中 Bean 之间存在继承和依赖关系. 需要注意的是,这个继承和依赖指的是 bean 的配置之间的关系,而不是指实际意义上类与类之间的继承与依赖,它们不是一个概念. ...

随机推荐

  1. jsonp promise 封装

    import originJsonp from 'jsonp' export default function jsonp(url, data, option) { url += (url.index ...

  2. [JS设计模式]:单例模式(1)

    什么是单例模式 所谓单例,就是一个类只有一个实例,实现的方法一般是先判断是否存在实例,如果存在就直接返回,如果不存在就创建了再返回.这样确保了一个类只有一个实例对象. 实现的单例有很多种方式,最简单的 ...

  3. 【20190305】CSS-响应式图片:srcset+sizes,picture,svg

    响应式图片可以根据不同的设备屏幕大小从而选择加载不同的图片,从而节省带宽.实现响应式图片有三种方法:srcset+sizes属性.picture标签.svg 1. srcset+sizes srcse ...

  4. nginx sub模块替换文本

    nginx的ngx_http_sub_module模块,可以用于修改网站响应内容中的字符串,如过滤敏感词.第三方模块ngx_http_substitutions_filter_module,弥补了ng ...

  5. java.lang.NoSuchFieldError异常

    原因就是主项目的xml文件和库项目中的xml文件 命名一样,导致库项目中的xml文件被主项目覆盖,所以库项目就找不到xml中的相关id,就报异常了.   解决方法:修改主项目中的xml文件命名,不要和 ...

  6. Android 解决通过自定义设置打开热点后手机搜索不到热点的问题。

    开发过程中出现了通过自定义设置打开热点后手机搜索不到热点的问题. 后来通过观看  /data/misc/wifi  目录下的  hostapd.conf  文件,发现是 interface=ap0 d ...

  7. vs文件上传失败--超过最大字符限制

    一.问题 在文件上传时,会遇到大文件上传失败. >F12查看报错网络请求返回结果 >问题分析 由于vs上传文件默认的字符大小控制. 二.解决方法 >在web.config中修改或添加 ...

  8. 通过Visual Studio 2012 比较SQL Server 数据库的架构变更

    一 需求 随着公司业务的发展,数据库实例也逐渐增多,数据库也会越来越多,有时候我们会发现正式生产数据库也测试数据库数据不一致,也有可能是预发布环境下的数据库与其他数据库架构不一致,或者,分布式数据库上 ...

  9. MySQL自增列(AUTO_INCREMENT)相关知识点总结

      MySQL的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎.不同版本也有一些不同的特性),让人感觉有点稍微复杂.下面我们从一些测试开始,来认识 ...

  10. Mysql中联合索引的最左匹配原则

    在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先. 如果我们建立了一个2列的联合索引(col1,col2),实际上已经建立了两个联合索引(col1).(col1,col2); 如果有一 ...