zoukankan      html  css  js  c++  java
  • Spring学习笔记5

    bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息。

    例如初始化方法,静态工厂方法名等等。

    子bean的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或添加其他值(与Java类的继承概念一致)。

    当使用基于XML的配置元数据时,通过使用父属性,指定父bean作为该属性的值来表明子bean的定义。

    示例:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://www.springframework.org/schema/beans
     5         http://www.springframework.org/schema/beans/spring-beans.xsd">
     6         
     7     <bean id="helloWorld" class="com.microyum.HelloWorldExtend">
     8         <property name="message1" value="Hello First World" />
     9         <property name="message2" value="Hello Second World" />
    10     </bean>
    11     
    12     <bean id="helloIndia" class="com.microyum.HelloIndiaExtend" parent="helloWorld">
    13         <property name="message1" value="Hello First India" />
    14         <property name="message3" value="Hello Third India" />
    15     </bean>
    16 </beans>
    beanExtend.xml
     1 public class HelloWorldExtend {
     2     private String message1;
     3     private String message2;
     4 
     5     public void getMessage1() {
     6         System.out.println("World Message1:" + message1);
     7     }
     8 
     9     public void setMessage1(String message1) {
    10         this.message1 = message1;
    11     }
    12 
    13     public void getMessage2() {
    14         System.out.println("World Message2:" + message2);
    15     }
    16 
    17     public void setMessage2(String message2) {
    18         this.message2 = message2;
    19     }
    20 
    21 }
    HelloWorldExtend.java
     1 public class HelloIndiaExtend {
     2     private String message1;
     3     private String message2;
     4     private String message3;
     5 
     6     public void getMessage1() {
     7         System.out.println("India Message1: " + message1);
     8     }
     9 
    10     public void setMessage1(String message1) {
    11         this.message1 = message1;
    12     }
    13 
    14     public void getMessage2() {
    15         System.out.println("India Message2: " + message2);
    16     }
    17 
    18     public void setMessage2(String message2) {
    19         this.message2 = message2;
    20     }
    21 
    22     public void getMessage3() {
    23         System.out.println("India Message3: " + message3);
    24     }
    25 
    26     public void setMessage3(String message3) {
    27         this.message3 = message3;
    28     }
    29 
    30 }
    HelloIndiaExtend.java
     1 import org.springframework.context.ApplicationContext;
     2 import org.springframework.context.support.ClassPathXmlApplicationContext;
     3 
     4 public class MainAppExtend {
     5     public static void main(String[] args) {
     6         ApplicationContext context = new ClassPathXmlApplicationContext(
     7                 "beanExtend.xml");
     8 
     9         HelloWorldExtend objA = (HelloWorldExtend) context
    10                 .getBean("helloWorld");
    11         objA.getMessage1();
    12         objA.getMessage2();
    13 
    14         HelloIndiaExtend objB = (HelloIndiaExtend) context
    15                 .getBean("helloIndia");
    16         objB.getMessage1();
    17         objB.getMessage2();
    18         objB.getMessage3();
    19     }
    20 }
    MainAppExtend.java

    输出结果:

    World Message1:Hello First World
    World Message2:Hello Second World
    India Message1: Hello First India
    India Message2: Hello Second World
    India Message3: Hello Third India

    这里可以观察到,在beanExtend.xml文件中,创建"helloIndia"bean的同时并没有传递message2,但由于Bean定义了继承,所有这里传递了message2

    Bean定义模板

    你可以创建一个Bean定义模板,不需要花太多功夫它就可以被其他子bean定义使用。

    在定义一个Bean定义模板时,你不应该指定类的属性,而应该指定带true值的抽象属性

    如下所示:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://www.springframework.org/schema/beans
     5         http://www.springframework.org/schema/beans/spring-beans.xsd">
     6         
     7     <bean id="beanTemplate" abstract="true">
     8         <property name="message1" value="Hello World" />
     9         <property name="message2" value="Hello Second World" />
    10         <property name="message3" value="Namaste India" />
    11     </bean>
    12     
    13     <bean id="helloIndia" class="com.microyum.HelloIndiaExtend" parent="beanTemplate">
    14         <property name="message1" value="Hello India" />
    15         <property name="message3" value="Namaste India" />
    16     </bean>
    17 </beans>
    beanTemplate.xml

    父bean自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象的。

    当一个定义是抽象的,它仅仅作为一个纯粹的模板bean定义来使用,充当子定义的父定义使用。

    示例:

     1 public class MainAppExtend {
     2     public static void main(String[] args) {
     3         ApplicationContext context = new ClassPathXmlApplicationContext(
     4                 "beanTemplate.xml");
     5 
     6         // HelloWorldExtend objA = (HelloWorldExtend) context
     7         // .getBean("helloWorld");
     8         // objA.getMessage1();
     9         // objA.getMessage2();
    10 
    11         HelloIndiaExtend objB = (HelloIndiaExtend) context
    12                 .getBean("helloIndia");
    13         objB.getMessage1();
    14         objB.getMessage2();
    15         objB.getMessage3();
    16     }
    17 }
    MainAppExtend.java

    输出结果:

    India Message1: Hello India
    India Message2: Hello Second World
    India Message3: Namaste India

  • 相关阅读:
    Java的值传递和引用传递的说法
    将对象写道硬盘上and从硬盘上读入对象
    分割一个文件and合并一个文件(并且带有配置信息记录)
    文件的切割和合并
    SequenceInputStream的用法(用来合并流然后一起操作)
    PrintStream和PrintWrite用法
    将一个文件夹中的所有含有某个后缀的文件写进一个文件里面
    关于Properties的制作配置文件(当一个app已经5次被打开我们就收费)
    Properties的用法
    深层删除一个目录(java)
  • 原文地址:https://www.cnblogs.com/microyum/p/6903078.html
Copyright © 2011-2022 走看看