hualinux spring 3.8:繼承、依賴

目錄

 一、知識點

二、 例子

2.1 繼承例子

2.1.1 目錄結構

2.1.2 XML配置

2.1.3測試

2.2  抽象bean例子

2.3 依賴 例子


上章講了自動裝配,本章將講繼承、依賴

 一、知識點

  • Spring 允許繼承 bean 的配置, 被繼承的 bean 稱爲父 bean. 繼承這個父 Bean 的 Bean 稱爲子 Bean
  • 子 Bean 從父 Bean 中繼承配置, 包括 Bean 的屬性配置
  • 子 Bean 也可以覆蓋從父 Bean 繼承過來的配置
  • 父 Bean 可以作爲配置模板, 也可以作爲 Bean 實例. 若只想把父 Bean 作爲模板, 可以設置 <bean> 的abstract 屬性爲 true, 這樣 Spring 將不會實例化這個 Bean
  • 並不是 <bean> 元素裏的所有屬性都會被繼承. 比如: autowire, abstract 等.
  • 可以忽略父 Bean 的 class 屬性, 讓子 Bean 指定自己的類, 而共享相同的屬性配置. 但此時 abstract 必須設爲 true

二、 例子

我也是繼續在前一章項目的基礎上通過添加包和之前的代碼隔開

2.1 繼承例子

2.1.1 目錄結構

紅框的是本章代碼,其它的是前一些章節的代碼

2.1.2 XML配置

src右擊-->new-->XML Configuration File-->Spring config-->輸入名字“beans-relaton” 

    <bean id="address" class="com.hualinux.beans.autowire.Address"
          p:city="BeiJing" p:street="HuiLongGuan"/>

    <bean id="address2" class="com.hualinux.beans.autowire.Address"
          p:city="BeiJing" p:street="DaZhongSi" parent="address"/>

2.1.3測試

com.hualinux.beans.relaton.Main.java代碼

package com.hualinux.beans.relaton;

import com.hualinux.beans.autowire.Address;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-relaton.xml");
        Address address= (Address) ctx.getBean("address");
        System.out.println(address);

        address= (Address) ctx.getBean("address2");
        System.out.println(address);
    }
}

運行結果:

Address{city='BeiJing', street='HuiLongGuan'}
Address{city='BeiJing', street='DaZhongSi'}

 

2.2  抽象bean例子

beans-relaton.xml修改如下

  <bean id="addressTemplate" class="com.hualinux.beans.autowire.Address" abstract="true">
        <property name="city" value="廣州(默認)" />
        <property name="street" value="天河(默認)" />
    </bean>

    <bean id="address2" class="com.hualinux.beans.autowire.Address"
          parent="addressTemplate"/>


    <!--    <bean id="address" class="com.hualinux.beans.autowire.Address"
              p:city="BeiJing" p:street="HuiLongGuan"/>

        <bean id="address2" class="com.hualinux.beans.autowire.Address"
              p:city="BeiJing" p:street="DaZhongSi" parent="address"/>-->

src-->com.hualinux.beans.relaton.Main.java代碼修改如下

package com.hualinux.beans.relaton;

import com.hualinux.beans.autowire.Address;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-relaton.xml");
/*        Address address= (Address) ctx.getBean("address");
        System.out.println(address);*/

        Address address= (Address) ctx.getBean("address2");
        System.out.println(address);
    }
}

運行main結果如下

Address{city='廣州(默認)', street='天河(默認)'}

 

2.3 依賴 例子

beans-relaton.xml修改如下

   <bean id="addressTemplate" class="com.hualinux.beans.autowire.Address" abstract="true">
        <property name="city" value="廣州(默認)" />
        <property name="street" value="天河(默認)" />
    </bean>

    <bean id="address2" class="com.hualinux.beans.autowire.Address"
          parent="addressTemplate"/>

    <bean id="car" class="com.hualinux.beans.autowire.Car">
        <property name="brand" value="寶馬x7"/>
        <property name="price" value="1500000"/>
    </bean>

    <!-- 要求再配置Person時,必須有一個關聯的car! 換句話說person這個bean依賴於名爲car的bean-->
    <bean id="person" class="com.hualinux.beans.autowire.Person"
          p:name="Tom" p:address-ref="address2" depends-on="car"/>
    

    <!--    <bean id="address" class="com.hualinux.beans.autowire.Address"
              p:city="BeiJing" p:street="HuiLongGuan"/>

        <bean id="address2" class="com.hualinux.beans.autowire.Address"
              p:city="BeiJing" p:street="DaZhongSi" parent="address"/>-->

src-->com.hualinux.beans.relaton.Main.java代碼修改如下

package com.hualinux.beans.relaton;

import com.hualinux.beans.autowire.Address;
import com.hualinux.beans.autowire.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-relaton.xml");
/*        Address address= (Address) ctx.getBean("address");
        System.out.println(address);*/

/*
        Address address= (Address) ctx.getBean("address2");
        System.out.println(address);
*/

        Person person= (Person) ctx.getBean("person");
        System.out.println(person);

    }
}

運行結果:

Person{name='Tom', address=Address{city='廣州(默認)', street='天河(默認)'}, car=null}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章