Spring中bean配置的繼承


In Spring, the inheritance is supported in bean configuration for a bean to share common values, properties or configurations.

A child bean or inherited bean can inherit its parent bean configurations, properties and some attributes. In additional, the child beans are allow to override the inherited value.

例子如下:

public class Customer {
 
	private int type;
	private String action;
	private String Country;
 
	//...
 
}

  

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<bean id="BaseCustomerMalaysia" class="com.mkyong.common.Customer">
		<property name="country" value="Malaysia" />
	</bean>
 
	<bean id="CustomerBean" parent="BaseCustomerMalaysia">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>
 
</beans>

  

public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext context = 
			new ClassPathXmlApplicationContext("SpringBeans.xml");
 
    	Customer cust = (Customer)context.getBean("CustomerBean");
    	System.out.println(cust);
 
    }
}

  運行結果為:Customer [type=1, action=buy, Country=Malaysia]

In above example, the ‘BaseCustomerMalaysia’ is still able to instantiate, for example,

 

Customer cust = (Customer)context.getBean("BaseCustomerMalaysia");

  類似於java的抽象類,我們可以有:(注意abstract="true")

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<bean id="BaseCustomerMalaysia" class="com.mkyong.common.Customer" abstract="true">
		<property name="country" value="Malaysia" />
	</bean>
 
	<bean id="CustomerBean" parent="BaseCustomerMalaysia">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>
 
</beans>

  現在當你運行:

Customer cust = (Customer)context.getBean("BaseCustomerMalaysia");

  將會出現:

org.springframework.beans.factory.BeanIsAbstractException: 
	Error creating bean with name 'BaseCustomerMalaysia': 
	Bean definition is abstract

Pure Inheritance Template

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<bean id="BaseCustomerMalaysia" abstract="true">
		<property name="country" value="Malaysia" />
	</bean>
 
	<bean id="CustomerBean" parent="BaseCustomerMalaysia" 
	    class="com.mkyong.common.Customer">
 
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>
 
</beans>

  也可以重寫值:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<bean id="BaseCustomerMalaysia" class="com.mkyong.common.Customer" abstract="true">
		<property name="country" value="Malaysia" />
	</bean>
 
	<bean id="CustomerBean" parent="BaseCustomerMalaysia">
	    <property name="country" value="Japan" />
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>
 
</beans>

  




免責聲明!

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



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