Spring入門學習(Bean之間的關係) 第五節
阿新 • • 發佈:2019-01-06
Spring入門學習 第五節
Bean之間的關係(繼承,依賴)
繼承
- 繼續使用上節中建立的類。
- 建立一個Spring配置檔案
beans-relation.xml
<bean id="address" class="com.fafa.spring.autowire.Address" p:city="NanJing" p:street="QiXiaQu"></bean> <!-- bean 配置的繼承,使用bean的parent 屬性指定繼承哪個bean的配置 -->
parent
屬性指定繼承的bean - 建立測試方法:
測試結果:@Test public void testRelation(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:beans-relation.xml"); Address address2 = (Address)ctx.getBean("address2"); System.out.println(address2); }
address2繼承了address中的屬性。Address [city=
- 也可以建立抽象的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>
- 抽象的bean不能被例項化,只能被繼承。
依賴
- 使用
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>
- 此時使用測試方法測試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
- 現在定義一個car的bean
<bean id="car" class="com.fafa.spring.autowire.Car" p:brand="Audi" p:price="300000"></bean>
- 再次測試結果如下:
Person [name=Tom, address=Address [city=NanJing~, street=XuWuQu], car=null]