如何建立网站的步骤,贵金属企业网站源码,河北电子商务网站建设,谷歌seo博客转载自 Spring Bean 定义继承
Bean 定义继承
bean 定义可以包含很多的配置信息#xff0c;包括构造函数的参数#xff0c;属性值#xff0c;容器的具体信息例如初始化方法#xff0c;静态工厂方法名#xff0c;等等。
子 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 version1.0 encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdbean idhelloWorld classcom.tutorialspoint.HelloWorldproperty namemessage1 valueHello World!/property namemessage2 valueHello Second World!//beanbean idhelloIndia classcom.tutorialspoint.HelloIndia parenthelloWorldproperty namemessage1 valueHello India!/property namemessage3 valueNamaste 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 version1.0 encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdbean idbeanTeamplate abstracttrueproperty namemessage1 valueHello World!/property namemessage2 valueHello Second World!/property namemessage3 valueNamaste India!//beanbean idhelloIndia classcom.tutorialspoint.HelloIndia parentbeanTeamplateproperty namemessage1 valueHello India!/property namemessage3 valueNamaste India!//bean/beans
父 bean 自身不能被实例化因为它是不完整的而且它也被明确地标记为抽象的。当一个定义是抽象的它仅仅作为一个纯粹的模板 bean 定义来使用的充当子定义的父定义使用。