1. 程式人生 > >Spring入門學習(Bean之間的關係) 第五節

Spring入門學習(Bean之間的關係) 第五節

Spring入門學習 第五節

Bean之間的關係(繼承,依賴)

繼承

  1. 繼續使用上節中建立的類。
  2. 建立一個Spring配置檔案beans-relation.xml
    <bean id="address" class="com.fafa.spring.autowire.Address" 
    	p:city="NanJing" p:street="QiXiaQu"></bean>
    
    <!-- bean 配置的繼承,使用bean的parent 屬性指定繼承哪個bean的配置 -->
    <bean id="address2" class="com.fafa.spring.autowire.Address" p:city="NanJing~" parent="address"></bean> <bean id="address3" class="com.fafa.spring.autowire.Address" parent="address"></bean> <bean id="address4" class="com.fafa.spring.autowire.Address" parent="address"
    p:street="XuWuQu">
    </bean>
    parent屬性指定繼承的bean
  3. 建立測試方法:
    @Test
    public void testRelation(){
    	ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:beans-relation.xml");
    
    	Address address2 = (Address)ctx.getBean("address2");
    	System.out.println(address2);
    }
    
    測試結果:
    Address [city=
    NanJing~, street=QiXiaQu]
    address2繼承了address中的屬性。
  4. 也可以建立抽象的bean繼承
    去掉class屬性,設定abstract="true",測試結果同上。
    <!-- 
    	抽象bean:abstract="true"設定為抽象bean,它不能被IOC容器例項化, 只用來被繼承配置
    	若某一個bean的class屬性沒有指定,則該bean必須是一個抽象bean, 若忽略了class屬性則必須指定abstract屬性
    -->
    <bean id="address"
    	p:city="NanJing" p:street="XuWuQu" abstract="true"></bean>
    
  5. 抽象的bean不能被例項化,只能被繼承。

依賴

  1. 使用depends-on屬性來設定bean的前置依賴
    <!-- bean之間的依賴關係 -->
    <!-- 要求在配置bean時,必須有一個關聯的car!換句話說person這個bean依賴於Car這個bean 
    	通過depends-on屬性設定bean的前置依賴的bean,多個bean可以通過逗號隔開-->
    <bean id="person" class="com.fafa.spring.autowire.Person"
    	p:name="Tom" p:address-ref="address2" depends-on="car"></bean>
    
  2. 此時使用測試方法測試person會報錯
    	@Test
    	public void testRelation(){
    	ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:beans-relation.xml");
    	Person person = (Person)ctx.getBean("person");
    	System.out.println(person);
    }
    
    org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'car' is defined
    
  3. 現在定義一個car的bean
    <bean id="car" class="com.fafa.spring.autowire.Car"
    	p:brand="Audi" p:price="300000"></bean>
    
  4. 再次測試結果如下:
    Person [name=Tom, address=Address [city=NanJing~, street=XuWuQu], car=null]