bean定义可以包含许多配置信息,包括构造函数参数,属性值和特定于容器的信息,如初始化方法,静态工厂方法名称等.
子bean定义从父定义继承配置数据.子定义可以根据需要覆盖某些值,或者添加其他值.
Spring Bean定义继承与Java类继承无关,但继承概念是相同的.您可以将父bean定义定义为模板,其他子bean可以从父bean继承所需的配置.
使用基于XML的配置元数据时,指示子bean定义通过使用父属性,将父bean指定为此属性的值.
示例
让我们拥有一个正在运行的Eclipse IDE,并按照以下步骤创建一个Spring应用程序 :
步骤 | 描述 |
---|---|
1 | 创建一个名为 SpringExample 的项目,并在 com.it1352创建项目中的> src 文件夹. |
2 | 使用添加外部JAR 选项添加所需的Spring库,如 Spring Hello World示例章节中所述. |
3 | 创建Java类 HelloWorld , HelloIndia com.it1352包下的和 MainApp . |
4 | 在 src 文件夹下创建Beans配置文件 Beans.xml . |
5 | 最后一步是创建所有内容Java文件和Bean配置文件并运行应用程序,如下所述. |
以下是配置文件 Beans.xml 我们在其中定义了"helloWorld"bean,它有两个属性 message1 和 message2 .接下来,通过使用 parent 属性将"helloIndia"bean定义为"helloWorld"bean的子节点.子bean按原样继承 message2 属性,并覆盖 message1 属性并引入另一个属性 message3 .
以下是 HelloWorld.java 文件的内容 :
package com.it1352; 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.it1352; 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.it1352; 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); }}
完成源和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定义模板时,不应指定类属性,并应指定 abstract 属性,并应指定值为 true 如下面的代码片段 :
父bean本身无法实例化,因为它不完整,并且也明确标记为 abstract .当定义像这样抽象时,它只能用作纯模板bean定义,作为子定义的父定义.