bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。

子 bean 的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值。
Spring Bean 定义的继承与 Java 类的继承无关,但是继承的概念是一样的。你可以定义一个父 bean 的定义作为模板和其他子 bean 就可以从父 bean 中继承所需的配置。

当你使用基于 XML 的配置元数据时,通过使用父属性,指定父 bean 作为该属性的值来表明子 bean 的定义。

看个例子:

创建一个POJO,包含两个属性message1和message2.

package com.sap;public class HelloWorld {private String message1;private String message2;public void setMessage1(String message){this.message1  = message;}public void setMessage2(String message){this.message2  = message;}public void getMessage1(){System.out.println("World Message1 : " + message1);}public void getMessage2(){System.out.println("World Message2 : " + message2);}}

再创建一个HelloIndia, 这个类和HelloWorld没有任何继承关系上的关联:

public class HelloIndia {private String message1;private String message2;private String message3;public void setMessage1(String message){this.message1  = message;}public void setMessage2(String message){this.message2  = message;}public void setMessage3(String message){this.message3  = message;}public void getMessage1(){System.out.println("India Message1 : " + message1);}public void getMessage2(){System.out.println("India Message2 : " + message2);}public void getMessage3(){System.out.println("India Message3 : " + message3);}
}

bean.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><bean id="helloWorldJerry" class="com.sap.HelloWorld"><property name="message1" value="Hello World!"/><property name="message2" value="Hello Second World!"/></bean><bean id="helloIndia" class="com.sap.HelloIndia" parent="helloWorldJerry"><property name="message1" value="Hello India!"/><property name="message3" value="Namaste India!"/></bean>
</beans>

HelloWorld通过beans.xml注入了属性message1和message2,HelloIndia注入了属性message1和message3:

MainApp.java:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");HelloWorld objA = (HelloWorld) context.getBean("helloWorldJerry");objA.getMessage1();objA.getMessage2();HelloIndia objB = (HelloIndia) context.getBean("helloIndia");objB.getMessage1();objB.getMessage2();objB.getMessage3();}
}

输出:

World Message1 : Hello World!
World Message2 : Hello Second World!
India Message1 : Hello India!
India Message2 : Hello Second World!
India Message3 : Namaste India!

我们可以观察到,对于helloIndia,虽然我们没有在beans.xml里注入属性message2,但其仍然从parent bean即helloworld里继承了message2的属性值。

bean的parent除了是另一个bean外,也可以是一个模板(template),比如:

<bean id="beanTeamplate" abstract="true"><property name="message1" value="Hello World!"/><property name="message2" value="Hello Second World!"/><property name="message3" value="Namaste India!"/></bean>

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

Spring Bean的继承相关推荐

  1. Spring bean配置继承

    在 Spring,继承是用为支持bean设置一个 bean 来分享共同的值,属性或配置. 一个子 bean 或继承的bean可以继承其父 bean 的配置,属性和一些属性.另外,子 Bean 允许覆盖 ...

  2. Spring Bean 定义继承

    转载自  Spring Bean 定义继承 Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的 ...

  3. 【Spring】Spring Bean 定义继承

    Spring Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定 ...

  4. Spring教程——Spring Bean继承

    在 Spring 中,Bean 和 Bean 之间也存在继承关系.我们将被继承的 Bean 称为父 Bean,将继承父 Bean 配置信息的 Bean 称为子 Bean. Spring Bean 的定 ...

  5. 【一步一步学习spring】spring bean管理(上)

    1. spring 工厂类 我们前边的demo中用到的spring 工厂类是ClassPathXmlApplicationContext,从上图可以看到他还有一个兄弟类FileSystemApplic ...

  6. Spring8:一些常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

  7. 带你读懂Spring Bean 的生命周期,嘿,就是玩儿~

    带你读懂Spring Bean 的生命周期,嘿,就是玩儿~ 一.前言 今天我们来说一说 Spring Bean 的生命周期,小伙伴们应该在面试中经常遇到,这是正常现象.因为 Spring Bean 的 ...

  8. spring bean加载过程_Spring源码剖析3:Spring IOC容器的加载过程

    本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...

  9. Spring IOC-BeanFactory的继承体系结构

    本文主要介绍BeanFactory以及它的各种继承层级的接口.抽象类及实现类,因为内容很多,所以这里不介绍ApplicationContext继承体系下的类(虽然ApplicationContext本 ...

最新文章

  1. 简单的Linux扫描仪应用:C语言实现
  2. 如何保障消息中间件 100% 消息投递成功?如何保证消息幂等性?
  3. ubuntu16.04 配置nginx支持redis
  4. 想要酷炫大气的网页设计?这样做超吸睛
  5. linux screen vim 颜色不一样,tmux中的Vim显示错误的颜色
  6. 数据结构笔记(十)-- 循环队列
  7. Transact-SQL 参考的语法
  8. 我必须得告诉大家的 MySQL 优化原理
  9. 05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器
  10. Eclipse优化设置技巧
  11. 获取火山无水印视频方法
  12. 小米无线路由器服务器用户名和密码忘了,小米路由器管理密码忘记了怎么办?...
  13. 软件测试 因果+决策案例--中国象棋中走马
  14. 一个屌丝程序猿的人生(一百二十)
  15. 手脱 FSG 1.0 壳
  16. 柏诚股份冲刺上交所:年营收27.4亿 拟募资4.7亿
  17. 计算平均值和标准方差。
  18. MuleSoft知识总结-7.使用Anypoint Studio
  19. 那一场呼啸而过的青春
  20. 详解微信「看一看」多模型内容策略与召回

热门文章

  1. apache common-io.jar FileUtils
  2. 2009年9月等考试题及答案51CTO站第一时间发布
  3. Chrome 如何让光标快速定位到地址栏-进行搜索
  4. linux建立与删除目录
  5. i.mx6 Android5.1.1 servicemanager本地服务
  6. synchronized的使用方法
  7. 判断是否遵守某个协议
  8. 《疯狂Java讲义精粹》读书笔记2 ------ 多态
  9. 浅谈Web开发中的6种技术
  10. 东拉西扯:那些“老”互联网公司