「Spring认证」Spring Bean 定义继承

一个 bean 定义可以包含很多配置信息,包括构造函数参数、属性值和容器特定的信息,例如初始化方法、静态工厂方法名称等。子 bean 定义从父定义继承配置数据。子定义可以根据需要覆盖某些值或添加其他值。Spring Bean定义继承与Java类继承无关,但是继承的概念是一样的。您可以将父 bean 定义定义为模板,其他子 bean 可以从父 bean 继承所需的配置。当您使用基于 XML 的配置元数据时,您通过使用parent属性来指示子 bean 定义,将父 bean 指定为该属性的值。例子让我们有一个工作的 Eclipse IDE 并采取以下步骤来创建一个 Spring 应用程序 -脚步描述1创建一个名为SpringExample的项目,并在创建的项目的src文件夹下创建一个包com.tutorialspoint。2使用添加外部 JAR选项添加所需的 Spring 库,如Spring Hello World 示例章节中所述。3在com.tutorialspoint包下创建 Java 类HelloWorld、HelloIndia和MainApp。4在src文件夹下创建 Beans 配置文件Beans.xml。5最后一步是创建所有 Java 文件和 Bean 配置文件的内容并运行应用程序,如下所述。以下是配置文件beans.xml中,我们定义的“HelloWorld”豆它有两个属性MESSAGE1和消息2。下一个“helloIndia” bean 已通过使用parent属性定义为“helloWorld” bean 的子代。孩子继承豆消息2财产是,和覆盖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/beans   http://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 定义继承,它通过了。Bean 定义模板您可以创建一个 Bean 定义模板,它可以被其他子 Bean 定义使用而无需付出太多努力。在定义 Bean 定义模板时,您不应指定class属性,而应指定抽象 属性,并应指定值为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/beans   http://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 不能单独实例化,因为它是不完整的,并且它也被显式标记为abstract。当定义像这样抽象时,它只能用作纯模板 bean 定义,用作子定义的父定义。

(0)

相关推荐

  • vue3.0 mixin 混入

    首先是官方定义:混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被"混合&qu ...

  • Spring框架之beans源码完全解析

    导读:Spring可以说是Java企业开发里最重要的技术.而Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Oriented Programmin ...

  • 声明式渲染与 data 函数

    目录 声明式渲染 data 必须是一个函数 为什么 data 必须是一个函数? 提一个 data 作为箭头函数的写法 源码 声明式渲染 这是学习vue开发,必先了解的第一个特征.如前已经实现的App. ...

  • 「Spring认证」Spring Bean 后处理器

    该BeanPostProcessor的接口定义回调方法,你可以实现提供自己的实例化逻辑,依赖解析逻辑等,还可以实现后的Spring容器完成实例化,配置,并通过在一个或多个堵塞初始化豆一些自定义逻辑Be ...

  • 「Spring认证」Spring认证框架教程

    Spring 可能是您所有企业应用程序的一站式商店.但是,Spring 是模块化的,允许您挑选适合您的模块,而无需引入其余模块.以下部分提供有关 Spring Framework 中所有可用模块的详细 ...

  • 「Spring认证」Spring环境设置

    本章将指导您如何准备开发环境以开始使用 Spring Framework.它还将教您如何在设置 Spring Framework 之前在您的机器上设置 JDK.Tomcat 和 Eclipse - 步 ...

  • Spring认证-注入内部 Bean

    如您所知,Java 内部类是在其他类的范围内定义的,类似地,内部 bean是在另一个 bean 的范围内定义的 bean.因此, 或 元素内的 元素称为内部 bean,如下所示. 例子 让我们使用 E ...

  • 老年人学手机在网上进行「社保认证」

    老年人学手机(085)在网上进行「社保认证」 我从2018年开始,每年社保认证都是在手机上进行,除了第一次注册登录稍费占时间,以后每次认证用不了一分钟,在家里就认证通过了,非常方便. 根据我使用网上[ ...

  • 老年人学手机(085)在网上进行「社保认证」

    我从2018年开始,每年社保认证都是在手机上进行,除了第一次注册登录稍费占时间,以后每次认证用不了一分钟,在家里就认证通过了,非常方便.根据我使用网上[社保认证]的体会,给老年朋友谈一谈,为了老年朋友 ...

  • 老年人学手机(085)你会在网上进行「社保认证」吗?

    老年人学手机(085)你会在网上进行「社保认证」吗?

  • 【Spring认证】Spring核心基础教程详解?

    Spring 框架是一个开源 Java 平台,它为非常容易和非常快速地开发健壮的 Java 应用程序提供了全面的基础设施支持.Spring 框架最初由 Rod Johnson 编写,并于 2003 年 ...

  • 有了「择优理赔」,旧定义重疾险更香了

    放大招啦,信泰人寿和昆仑健康纷纷推出了择优理赔. 涉及的产品包括: 信泰家:达尔文3号.如意甘霖等共计66款旧定义重疾险.  昆仑家:暂时仅限守卫者3号 择优理赔的意思是,日后确诊重疾,针对疾病的理赔 ...