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">就会报错

最新文章

  1. Python实例2
  2. 一个Angular模块中可以声明哪些组件?
  3. Js杂谈-DOM
  4. 快速掌握Flyway
  5. 测试过程中LR的关联报错
  6. [源代码] - C#代码搜索器 - 续
  7. HDOJ 2188 悼念512汶川大地震遇难同胞——选拔志愿者
  8. jquery如何将获取的颜色值转换为十六进制形式
  9. BZOJ 4300 绝世好题(位运算)
  10. JAVA----类的继承1(extends)
  11. spring4+srpingmvc+mybatis基本框架(app后台框架搭建一)
  12. EntityFramework中对象的状态管理(笔记)
  13. SQL--server事物
  14. 获取当前目录绝对路径,参考canal run.sh里面的方式
  15. 超级好看!巧用PS将风光人像打造成唯美的小星球效果!
  16. Maven 打包遇到的问题
  17. Fragment Transactions &amp; Activity State Loss
  18. JSON JSONPath
  19. Spring笔记①--helloworld
  20. BZOJ 1340: [Baltic2007]Escape逃跑问题

热门文章

  1. ubuntu所有php扩展php-7.0扩展列表
  2. Java开发笔记(五十二)对象的类型检查
  3. Java Scanner nextLine方法跳过
  4. Activiti(二) springBoot2集成activiti,集成activiti在线设计器
  5. Spring(一)JdbcTemplate的环境搭建
  6. audio currentTime 时间戳转换(es6语法)
  7. 字符串hash入门
  8. bitset中_Find_first()与_Find_next()函数
  9. vivo如何录制手机视频 分享简单的操作方法
  10. Android 网络框架 OKHttp3