📅  最后修改于: 2020-11-11 07:01:05             🧑  作者: Mango
Bean定义可以包含许多配置信息,包括构造函数参数,属性值和特定于容器的信息,例如初始化方法,静态工厂方法名称等。
子bean定义从父定义继承配置数据。子定义可以根据需要覆盖某些值,或添加其他值。
Spring Bean定义继承与Java类继承无关,但继承概念相同。您可以将父bean定义定义为模板,其他子bean可以从父bean继承所需的配置。
当您使用基于XML的配置元数据时,可以通过使用parent属性来指定子bean定义,并指定父bean作为该属性的值。
让我们拥有一个运行良好的Eclipse IDE,并采取以下步骤来创建一个Spring应用程序:
Steps | Description |
---|---|
1 | Create a project with a name SpringExample and create a package com.tutorialspoint under the src folder in the created project. |
2 | Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter. |
3 | Create Java classes HelloWorld, HelloIndia and MainApp under the com.tutorialspoint package. |
4 | Create Beans configuration file Beans.xml under the src folder. |
5 | The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below. |
以下是我们定义的“HelloWorld”豆它有两个属性MESSAGE1和消息2配置文件beans.xml中。通过使用父属性,下一个“ helloIndia” bean被定义为“ helloWorld” bean的子代。孩子继承豆消息2财产是,和覆盖MESSAGE1财产,并介绍了一个更多的财产MESSAGE3。
这是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 Definition Inheritance而被传递。
您可以创建一个Bean定义模板,该模板可以由其他子bean定义使用,而无需花费很多精力。在定义Bean定义模板时,您不应指定class属性,而应指定abstract属性,并且应将true值指定为abstract属性,如以下代码片段所示-
父bean不能单独实例化,因为它是不完整的,并且还被明确标记为abstract 。当这样的定义是抽象的时,它只能用作纯模板bean定义,用作子定义的父定义。