- 为了精简配置文件,可以把一些具有相同属性的bean的这些相同的属性抽象出来,定义成一个抽象bean,再在其他bean通过过parent属性指定继承的bean,来获得这些配置信息。
- 话不多说,代码奉上
- 这个例子定义了一个父类ParentClass,其中有一个成员变量和一个简单的输出方法。
- 在配置文件中将通过abstract属性将他指定成“抽象bean”,这样spring就不会去实例化它。
- 定义两个继承ParentCalss的类,并且在配置文件中对继承的变量进行了重新赋值,这回覆盖掉父类中对该变量的赋值。
- 程序结构
-
package ParentClass; public class ParentSay { String symbol = "~"; public String say(){ return ""; } public String getSymbol() { return symbol; } public void setSymbol(String symbol) { this.symbol = symbol; } }
package InstanceClassPackage; import ParentClass.ParentSay; public class ASay extends ParentSay { String symbol; @Override public String say(){ return "A is saying" + symbol; } @Override public String getSymbol() { return symbol; } @Override public void setSymbol(String symbol) { this.symbol = symbol; } }
package InstanceClassPackage; import ParentClass.ParentSay; public class BSay extends ParentSay { String symbol; @Override public String getSymbol() { return symbol; } @Override public void setSymbol(String symbol) { this.symbol = symbol; } @Override public String say(){ return "B is saying" + symbol; } }
package TestClassPackage; import InstanceClassPackage.ASay; import InstanceClassPackage.BSay; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { public static void main(String []args){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); ASay aSay = applicationContext.getBean("a_say", ASay.class); BSay bSay = applicationContext.getBean("b_say", BSay.class); System.out.println(aSay.say()); System.out.println(bSay.say()); } }
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!--通过abstract属性将parentSay bean定义成抽象bean,这样spring就不会创建实例--> <bean id ="parentSay" class="ParentClass.ParentSay" abstract="true"> <property name="symbol" value="@"/> </bean> <!--通过parent标签指定a_say的父bean,从而继承得到它的配置信息,但是又重新指定了symbol的值, 覆盖了父类对它的定义--> <bean id = "a_say" class="InstanceClassPackage.ASay" parent="parentSay"> <property name="symbol" value="#"/> </bean> <bean id="b_say" class="InstanceClassPackage.BSay" parent="parentSay"> <property name="symbol" value="%"/> </bean> </beans>
这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。
Spring(14) 抽象bean
最新推荐文章于 2022-07-18 23:58:54 发布