spring bean之間的關系:繼承;依賴


概要:



繼承Bean配置

  • 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


依賴Bean配置

  • Spring同意用戶通過depends-on屬性設定Bean前置依賴的Bean,前置依賴的Bean會在本Bean實例化之前創建好
  • 假設前置依賴於多個Bean,則能夠通過逗號,空格或的方式配置Bean的名稱

實例代碼具體解釋
代碼結構:


Main.java
package com.coslay.beans.relation;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.coslay.beans.autowire.Address;
import com.coslay.beans.autowire.Person;

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


beans-relation.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 抽象bean:bean的abstract屬性為true的bean。這樣bean不能被IOC容器實例化。僅僅能用來被繼承繼承 
		若某一個bean的class屬性沒有指定,則該bean必須是一個抽象bean-->	
	<bean id="address" 
		p:city="Beijing" p:street="WuDaoKou" abstract="true"></bean>
		
	<!-- <bean id="address2" class="com.coslay.beans.autowire.Address"
		p:city="Beijing" p:street="DaZhongSi"></bean> -->
	<!-- bean 配置的繼承:使用bean 的parent 屬性指定繼承哪個baen的配置 -->
	<bean id="address2" class="com.coslay.beans.autowire.Address" 
		parent="address"></bean>
		
	<bean id="address3" class="com.coslay.beans.autowire.Address" 
		p:street="DaZhongSi" parent="address2"></bean>
	
	<bean id="car" class="com.coslay.beans.autowire.Car"
		p:brand="Audi" p:price="300000"></bean>
	
	<!-- 
		要求在配置Person時。必須有一個關聯的car!換句話說person這個bean依賴於Car這個bean
	 -->
	<bean id="person" class="com.coslay.beans.autowire.Person"
		p:name="Tom" p:address-ref="address2" depends-on="car"></bean>
	
</beans>



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM