开发手册 欢迎您!
软件开发者资料库

Spring - Bean定义继承

Spring Bean定义继承 - 从简单和简单的步骤学习Java Spring Framework 4.1.6版,从基本概念到高级概念,包括概述,体系结构,环境设置,Hello World示例,控制反转(IoC),依赖注入,bean定义,范围,bean生命周期,后处理器,定义继承,依赖注入,内部bean,注入集合,自动装配,注释,基于Java的配置,事件处理,自定义事件,不同模块,面向方面编程(AOP),数据库访问(JDBC ),事务管理,Web MVC框架,使用Log4j进行日志记录,Web流,异常处理,EJB集成和发送电子邮件,Spring面试问题,答案,测验和在线模拟测试。

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定义,作为子定义的父定义.