【Spring】Spring Bean 定义继承
Spring Bean 定义继承
bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。
子 bean 的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值。
Spring Bean 定义的继承与 Java 类的继承无关,但是继承的概念是一样的。你可以定义一个父 bean 的定义作为模板和其他子 bean 就可以从父 bean 中继承所需的配置。
当你使用基于 XML 的配置元数据时,通过使用父属性,指定父 bean 作为该属性的值来表明子 bean 的定义。
2.实例
我们在适当的位置使用 Eclipse IDE,然后按照下面的步骤来创建一个 Spring 应用程序:
步骤 描述
1 创建一个名称为 SpringExample 的项目,并且在创建项目的 src 文件夹中创建一个包 com.xxkt。
2 使用 Add External JARs 选项,添加所需的 Spring 库,解释见 Spring Hello World Example 章节。
3 在 com.xxkt 包中创建 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.xxkt.HelloWorld"><property name="message1" value="Hello World!"/><property name="message2" value="Hello Second World!"/></bean><bean id="helloIndia" class="com.xxkt.HelloIndia" parent="helloWorld"><property name="message1" value="Hello India!"/><property name="message3" value="Namaste India!"/></bean></beans>
这里是 HelloWorld.java 文件的内容:
package com.xxkt;
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.xxkt;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.xxkt;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.xxkt.HelloIndia" parent="beanTeamplate"><property name="message1" value="Hello India!"/><property name="message3" value="Namaste India!"/></bean></beans>
父 bean 自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象的。当一个定义是抽象的,它仅仅作为一个纯粹的模板 bean 定义来使用的,充当子定义的父定义使用。
【Spring】Spring Bean 定义继承相关推荐
- Spring Bean 定义继承
转载自 Spring Bean 定义继承 Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的 ...
- Spring的bean定义 2 : 通用bean定义逻辑 -- AbstractBeanDefinition
概述 AbstractBeanDefinition是最终全功能BeanDefinition实现类的基类,也就是这些类的共同属性和公共逻辑实现. AbstractBeanDefinition中并没有太复 ...
- 品Spring:bean定义上梁山
技术不枯燥,先来点闲聊 先说点好事高兴一下.前段时间看新闻说,我国正式的空间站建设已在进行当中.下半年,长征五号B运载火箭将在海南文昌航天发射场择机将空间站核心舱发射升空.预计用2到3年将空间站建好. ...
- spring的bean定义真的和顺序无关?
http://narcissusoyf.iteye.com/blog/705511 在使用Ibatis的时候,如果某个sql的定义出现在引用sql的定义之后的话,笨笨的ibatis是会报错的..这让用 ...
- Spring中Bean定义的注册流程
目录 一.前言 二.Bean定义的注册流程 1.注册流程 2.SpringApplication组件 2.1.run()核心逻辑
- 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 中bean解释以及bean标签里面的属性
一.bean标签: 英文解释:Defines a single (usually named) bean. A bean definition may contain nested tags for ...
- Spring Boot: Bean definition overriding
在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制. 为了使您对该主题更加清楚,让我们从小测验开始.请看下一个简单的例子. 因此,我们有2种配置,它们使用名称beanName实例化b ...
最新文章
- java为啥要捕捉异常_java – 为什么在捕获时使用IOexception而不是Exception?
- Windows下Unity5x的安装
- 人体姿态估计论文总结 (2D + 视频)
- 移动机器人平台-ROS和GitHub链接
- php mysql文件缓存_PHP文件缓存类实现代码
- 异步IO\数据库\队列\缓存
- python共享文件权限_利用Python实现在同一网络中的本地文件共享方法
- php如何求同列元素之和_求得这个数组中各个元素之和
- UE4多线程任务系统详解
- 图片渲染延迟_2D Canvas 的渲染优化
- Linux下如何从普通用户切换到root用户
- Android实现本地推送通知的解决方案
- OpenGL实现B样条曲线
- Web The7安装
- 大师速写作品及理论,有你喜欢的知识
- Oracle EBS APP-FND-02901: you don‘t have privilege to any operating unit
- java常见单词汇总3(非常使用哦)
- 如何用 ffmpeg命令将avi视频转换为mp4
- 2020年11月软件设计师真题透析
- Ae安装时出现(此时无法安装错误代码127) 怎么办?
热门文章
- 此“小霸王”非彼小霸王?官方声明:小霸王并未破产!
- 腾讯云与阿里云竞争激烈:销售团队积极争取每一笔交易
- 余额宝上线新功能,可以跟亲朋好友一起攒钱了
- 罗永浩直播又翻车?网友吐槽半价车是黑幕,本人回应
- “宅家十大热销商品”榜单:确认过眼神,都是自己剪头发的人
- 王思聪又双被限制消费了!
- 搜狐提出畅游私有化要约 后者收盘涨近50%
- 为真全面屏探路?2019款新iPhone将采用超小前置摄像头
- 华为P30系列机身侧面照曝光 摄像头仍然“凸起”...
- 从开场白第一句到得分