[spring]從頭開始-Bean Inheritance

開發工具:IntelliJ IDEA 13

開發環境:jdk1.6.0_45

Framework:spring 3

Java 類別可以用 extend 來實現繼承的關係,那bean可以實現繼承關係嗎?

答案是當然可以!!!之前我們使用 ctx.setParent(“beanName”) 來完成,現在我們改用xml來配置看看

下面就來看看範例:

首先先建立一個可用來演繹的bean

SimpleBean.java

package foo.bar;

import org.springframework.context.support.GenericXmlApplicationContext;

/**

 * Created by Hsu on 2014/7/14.

 */

public class SimpleBean {

    public String name;

    public int age;

    public static void main(String[] args) {

        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();

        ctx.load("classpath:spring-config.xml");

        SimpleBean parent = (SimpleBean) ctx.getBean("inheritParent");

        SimpleBean child = (SimpleBean) ctx.getBean("inheritChild");

        System.out.println("Parent:\n" + parent);

        System.out.println("Child:\n" + child);

    }

    public void setName(String name) {

        this.name = name;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String toString() {

        return "Name: " + name + "\n"

                + "Age: " + age;

    }

}

接著再配置一個對應的 spring configuration file

spring-config.xml

..

..標頭的部分省略

    <bean id="inheritParent" class="foo.bar.SimpleBean">

        <property name="name">

            <value>Clarence Ho</value>

        </property>

        <property name="age">

            <value>22</value>

        </property>

    </bean>

    <!-- 指定繼承的 bean 名稱,使用parent="beanName" -->

    <bean id="inheritChild" class="foo.bar.SimpleBean"

          parent="inheritParent">

        <property name="age">

            <value>35</value>

        </property>

    </bean>

..結尾省略

我們可以看一下,第二個bean:inheritChild 沒有設定 name 這個 property,但是可以透過指定 parent 的方式,直接取道 parent 中的 name 值。

執行結果:

Parent:

Name: Clarence Ho

Age: 22

Child:

Name: Clarence Ho

Age: 35

demo程式(右鍵另開視窗下載)