Spring Bean 定义继承
转载自 Spring Bean 定义继承
Bean 定义继承
bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。
子 bean 的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值。
Spring Bean 定义的继承与 Java 类的继承无关,但是继承的概念是一样的。你可以定义一个父 bean 的定义作为模板和其他子 bean 就可以从父 bean 中继承所需的配置。
当你使用基于 XML 的配置元数据时,通过使用父属性,指定父 bean 作为该属性的值来表明子 bean 的定义。
例子
我们在适当的位置使用 Eclipse IDE,然后按照下面的步骤来创建一个 Spring 应用程序:
步骤 | 描述 |
---|---|
1 | 创建一个名称为 SpringExample 的项目,并且在创建项目的 src 文件夹中创建一个包 com.tutorialspoint。 |
2 | 使用 Add External JARs 选项,添加所需的 Spring 库,解释见 Spring Hello World Example 章节。 |
3 | 在 com.tutorialspoint 包中创建 Java 类 HelloWorld、HelloIndia 和 MainApp。 |
4 | 在 src 文件夹中创建 Beans 配置文件 Beans.xml。 |
5 | 最后一步是创建的所有 Java 文件和 Bean 配置文件的内容,并运行应用程序,解释如下所示。 |
下面是配置文件 Beans.xml,在该配置文件中我们定义有两个属性 message1 和 message2 的 “helloWorld” bean。然后,使用 parent 属性把 “helloIndia” bean 定义为 “helloWorld” bean 的孩子。这个子 bean 继承 message2 的属性,重写 message1 的属性,并且引入一个属性 message3。
<?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="helloWorld" class="com.tutorialspoint.HelloWorld"><property name="message1" value="Hello World!"/><property name="message2" value="Hello Second World!"/></bean><bean id="helloIndia" class="com.tutorialspoint.HelloIndia" parent="helloWorld"><property name="message1" value="Hello India!"/><property name="message3" value="Namaste India!"/></bean></beans>
这里是 HelloWorld.java 文件的内容:
package com.tutorialspoint;
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.java 文件的内容:
package com.tutorialspoint;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);}
}
下面是 MainApp.java 文件的内容:
package com.tutorialspoint;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("helloWorld");objA.getMessage1();objA.getMessage2();HelloIndia objB = (HelloIndia) context.getBean("helloIndia");objB.getMessage1();objB.getMessage2();objB.getMessage3();}
}
一旦你创建源代码和 bean 配置文件完成后,我们就可以运行该应用程序。如果你的应用程序一切都正常,将输出以下信息:
World Message1 : Hello World!
World Message2 : Hello Second World!
India Message1 : Hello India!
India Message2 : Hello Second World!
India Message3 : Namaste India!
在这里你可以观察到,我们创建 “helloIndia” bean 的同时并没有传递 message2,但是由于 Bean 定义的继承,所以它传递了 message2。
Bean 定义模板
你可以创建一个 Bean 定义模板,不需要花太多功夫它就可以被其他子 bean 定义使用。在定义一个 Bean 定义模板时,你不应该指定类的属性,而应该指定带 true 值的抽象属性,如下所示:
<?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="beanTeamplate" abstract="true"><property name="message1" value="Hello World!"/><property name="message2" value="Hello Second World!"/><property name="message3" value="Namaste India!"/></bean><bean id="helloIndia" class="com.tutorialspoint.HelloIndia" parent="beanTeamplate"><property name="message1" value="Hello India!"/><property name="message3" value="Namaste India!"/></bean></beans>
父 bean 自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象的。当一个定义是抽象的,它仅仅作为一个纯粹的模板 bean 定义来使用的,充当子定义的父定义使用。
Spring Bean 定义继承相关推荐
- 【Spring】Spring Bean 定义继承
Spring Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定 ...
- Spring bean配置继承
在 Spring,继承是用为支持bean设置一个 bean 来分享共同的值,属性或配置. 一个子 bean 或继承的bean可以继承其父 bean 的配置,属性和一些属性.另外,子 Bean 允许覆盖 ...
- Spring Bean的继承
bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定义可以根据需要重写一些值,或者添加 ...
- Spring Bean 定义
转载自 Spring Bean 定义 Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring I ...
- bean定义的继承 - Spring Framework reference 2.0.5 参考手册中文版
http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch03s06.html 3.6. bean定义的继承 在bean定义中包含了大量的 ...
- Spring中Bean的定义继承
以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-definition-inheritance.html: Bean定义继承 bean定义可 ...
- Spring教程——Spring Bean继承
在 Spring 中,Bean 和 Bean 之间也存在继承关系.我们将被继承的 Bean 称为父 Bean,将继承父 Bean 配置信息的 Bean 称为子 Bean. Spring Bean 的定 ...
- Spring-Boot 2.1.x和主要的bean定义
我最近将应用程序从Spring Boot 1.5.X迁移到Spring Boot 2.X ,发现覆盖Spring Bean定义存在问题. 其中一种配置是在Kotlin中遵循的: @Configurat ...
- Spring Bean详解
Spring bean是Spring框架在运行时管理的对象.Spring bean是任何Spring应用程序的基本构建块.你编写的大多数应用程序逻辑代码都将放在Spring bean中. Spring ...
最新文章
- 刷爆 AI 圈!基于 Transformer 的 DALL-E 代码刚刚开源了
- 忘记Mysql的root密码怎么办
- hdu 2074 叠框
- centos 安装配置ftp服务器
- Nordic Collegiate Programming Contest (NCPC) 2016
- 吴裕雄--天生自然 高等数学学习:空间直角坐标系
- [转载] python跨行 print:多用(),换行符\要小心,少用+或者不用(其它程序代码跨行用\就行,不能用括号)
- java数据结构编程问题_Java语言程序设计与数据结构第十一版(基础篇)第一章编程练习题答案...
- mapgis67安装输入计算机名称,mapgis67_dogserver67.exe_mapgis67安装教程
- 【网络流24题-23】洛谷P3356 火星探险问题
- 20个免费的SEO网站分析工具
- 孙悟空的成长历程想到的
- 自组织(竞争型)神经网络
- 2.1 良好的代码格式
- How to GROUD?
- lua 报错:'=' expected near ' '
- 未来的城市:智慧城市定义、特征、应用、场景
- Kissy中的ajax异步提交
- linux硬盘可以拆吗,笔记本电脑硬盘拆下来,然后把移动硬盘也拆了,现在把移动硬盘安在笔记本上了,并安装了Linux系统...
- Mybatis 中的一级缓存与二级缓存
热门文章
- [C++11]forward完美转发
- LeetCode 82 删除排序链表中的重复元素||-中等
- hash table(用乘法散列法实现)
- 二叉搜索树(创建,插入,删除):基础篇,适合新手观看。
- src获取同级目录中的图片_一个简单的Python爬虫实例:百度贴吧页面下载图片
- LeetCode动态规划 最大子序和
- B. Lynyrd Skynyrd(倍增 + 区间最小值)
- Be the Winner(结论:反nim博弈)
- P5488 差分与前缀和(多项式/生成函数)
- HDU - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?! 莫队/单调栈 + 线段树/ST表在线