Spring配置文件中parent與abstract的使用
Spring配置文件parent與abstract
其實在基於spring框架開發的項目中,如果有多個bean都是一個類的實例,如配置多個數據源時,大部分配置的屬性都一樣,隻有少部分不一樣。
這樣的話在配置文件中可以配置和對象一樣進行繼承。
例如
<bean id="testParent" abstract="true" class="com.bean.TestBean"> <property name="param1" value="父參數1"/> <property name="param2" value="父參數2"/> </bean> <bean id="testBeanChild1" parent="testParent"/> <bean id="testBeanChild2" parent="testParent"> <property name="param1" value="子參數1"/> </bean>
其中 abstract=”true” 的配置表示:此類在Spring容器中不會生成實例。
parent=”testBeanParent” 代表子類繼承瞭testBeanParent,會生成具體實例,在子類Bean中配置會覆蓋父類對應的屬性。
spring使用parent屬性來減少配置
在基於spring框架開發的項目中,如果有多個bean都是一個類的實力,如配置多個數據源時,大部分配置的屬性都一樣,隻有少部分不一樣,經常是copy上一個的定義,然後修改不一樣的地方。其實spring bean定義也可以和對象一樣進行繼承。
示例如下:
<bean id="testBeanParent" abstract="true" class="com.wanzheng90.bean.TestBean"> <property name="param1" value="父參數1"/> <property name="param2" value="父參數2"/> </bean> <bean id="testBeanChild1" parent="testBeanParent"/> <bean id="testBeanChild2" parent="testBeanParent"> <property name="param1" value="子參數1"/> </bean>
testBeanParent是父bean,其中abstract=“true”表示testBeanParen不會被創建,類似於於抽象類。其中testBeanChild1、testBeanChild2繼承瞭testBeanParent、,其中testBeanChild2重新對param1屬性進行瞭配置,因此會覆蓋testBeanParent
對param1屬性屬性的配置。
代碼如下:
TestBean
public class TestBean { private String param1; private String param2; public String getParam1() { return param1; } public void setParam1(String param1) { this.param1 = param1; } public String getParam2() { return param2; } public void setParam2(String param2) { this.param2 = param2; } }
App:
public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml"); TestBean testBeanChild1 = (TestBean) context.getBean("testBeanChild1"); System.out.println( testBeanChild1.getParam1()); System.out.println( testBeanChild1.getParam2()); TestBean testBeanChild2 = (TestBean) context.getBean("testBeanChild2"); System.out.println( testBeanChild2.getParam1()); System.out.println( testBeanChild2.getParam2()); } }
app main函數輸出:
父參數1
父參數2
子參數1
父參數2
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringBoot項目如何將Bean註入到普通類中
- Java基礎之Spring5的核心之一IOC容器
- 詳解Spring Bean的配置方式與實例化
- 詳解Spring Bean的集合註入和自動裝配
- Java Spring框架簡介與Spring IOC詳解