Spring(14) 抽象bean

  1. 为了精简配置文件,可以把一些具有相同属性的bean的这些相同的属性抽象出来,定义成一个抽象bean,再在其他bean通过过parent属性指定继承的bean,来获得这些配置信息。
  2. 话不多说,代码奉上
    1. 这个例子定义了一个父类ParentClass,其中有一个成员变量和一个简单的输出方法。
    2. 在配置文件中将通过abstract属性将他指定成“抽象bean”,这样spring就不会去实例化它。
    3. 定义两个继承ParentCalss的类,并且在配置文件中对继承的变量进行了重新赋值,这回覆盖掉父类中对该变量的赋值。
    4. 程序结构
    5. 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》后总结出来的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值