Spring配置文件中parent與abstract的使用
Spring配置文件parent與abstract
其實(shí)在基于spring框架開發(fā)的項(xiàng)目中,如果有多個(gè)bean都是一個(gè)類的實(shí)例,如配置多個(gè)數(shù)據(jù)源時(shí),大部分配置的屬性都一樣,只有少部分不一樣。
這樣的話在配置文件中可以配置和對(duì)象一樣進(jìn)行繼承。
例如
<bean id="testParent" abstract="true" class="com.bean.TestBean">
<property name="param1" value="父參數(shù)1"/>
<property name="param2" value="父參數(shù)2"/>
</bean>
<bean id="testBeanChild1" parent="testParent"/>
<bean id="testBeanChild2" parent="testParent">
<property name="param1" value="子參數(shù)1"/>
</bean>
其中 abstract="true" 的配置表示:此類在Spring容器中不會(huì)生成實(shí)例。
parent="testBeanParent" 代表子類繼承了testBeanParent,會(huì)生成具體實(shí)例,在子類Bean中配置會(huì)覆蓋父類對(duì)應(yīng)的屬性。
spring使用parent屬性來(lái)減少配置
在基于spring框架開發(fā)的項(xiàng)目中,如果有多個(gè)bean都是一個(gè)類的實(shí)力,如配置多個(gè)數(shù)據(jù)源時(shí),大部分配置的屬性都一樣,只有少部分不一樣,經(jīng)常是copy上一個(gè)的定義,然后修改不一樣的地方。其實(shí)spring bean定義也可以和對(duì)象一樣進(jìn)行繼承。
示例如下:
<bean id="testBeanParent" abstract="true" class="com.wanzheng90.bean.TestBean">
<property name="param1" value="父參數(shù)1"/>
<property name="param2" value="父參數(shù)2"/>
</bean>
<bean id="testBeanChild1" parent="testBeanParent"/>
<bean id="testBeanChild2" parent="testBeanParent">
<property name="param1" value="子參數(shù)1"/>
</bean>
testBeanParent是父bean,其中abstract=“true”表示testBeanParen不會(huì)被創(chuàng)建,類似于于抽象類。其中testBeanChild1、testBeanChild2繼承了testBeanParent、,其中testBeanChild2重新對(duì)param1屬性進(jìn)行了配置,因此會(huì)覆蓋testBeanParent
對(duì)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函數(shù)輸出:
父參數(shù)1
父參數(shù)2
子參數(shù)1
父參數(shù)2
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決java中mybatis報(bào)錯(cuò):org.apache.ibatis.binding.BindingException:
這篇文章主要介紹了解決java中mybatis報(bào)錯(cuò):org.apache.ibatis.binding.BindingException:Invalid bound statement(not found):xx問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2024-03-03
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之平行志愿管理系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+Springboot+Maven+mybatis+Vue+Mysql開發(fā)的圖片平行志愿管理系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有志愿管理該有的所有功能,感興趣的朋友快來(lái)看看吧2022-02-02

