Spring Beanの設定継承

Spring Beanの構成の継承

Springでは、BeanのBean構成で継承がサポートされ、共通の値、プロパティまたは構成が共有されます。

子Beanまたは継承されたBeanは、その親Bean構成、プロパティ、およびいくつかの属性を継承できます。 さらに、子Beanは継承された値をオーバーライドできます。

次の完全な例を参照して、SpringでのBean構成の継承の仕組みを示してください。

package com.example.common;

public class Customer {

    private int type;
    private String action;
    private String Country;

    //...

}

Bean構成ファイル



    
        
    

    
        
        
    

上の「BaseCustomerMalaysia」Beanには国のプロパティの「Malaysia」値が含まれており、「CustomerBean」Beanはその親(「BaseCustomerMalaysia」)からこの値を継承しています。

それを実行します

package com.example.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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]

「CustomerBean」Beanは、親(「BaseCustomerMalaysia」)からcountryプロパティを継承しました。

抽象による継承

上記の例では、「BaseCustomerMalaysia」は引き続きインスタンス化できます。たとえば、

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

このベースBeanをテンプレートとして作成し、他のユーザーがインスタンス化できないようにする場合は、要素に ‘abstract‘属性を追加できます。 例えば



    
        
    

    
        
        
    

これで、「BaseCustomerMalaysia」Beanは純粋なテンプレートです。Beanがそれを継承するだけであり、インスタンス化しようとすると、次のエラーメッセージが表示されます。

    Customer cust = (Customer)context.getBean("BaseCustomerMalaysia");
org.springframework.beans.factory.BeanIsAbstractException:
    Error creating bean with name 'BaseCustomerMalaysia':
    Bean definition is abstract

純粋な継承テンプレート

実際には、クラス属性を定義するために親Beanは必要ありません。多くの場合、共有のために共通のプロパティが必要な場合があります。 ここに例があります



    
        
    

    

        
        
    

この場合、「BaseCustomerMalaysia」Beanは、「国」プロパティのみを共有するための純粋なテンプレートです。

それを上書きする

ただし、子Beanで新しい値を指定することにより、継承された値をオーバーライドすることは引き続き許可されます。 この例を見てみましょう



    
        
    

    
        
        
        
    

「CustomerBean」Beanは、「Malaysia」から「Japan」まで、親(「BaseCustomerMalaysia」)の国のプロパティをオーバーライドするだけです。

Customer [Country=Japan, action=buy, type=1]

結論

Spring Bean構成の継承は、複数のBeanに共通の値や構成が繰り返されるのを避けるために非常に役立ちます。

ソースコードをダウンロード

ダウンロード–Spring-Bean-Inheritance-Example.zip(5 KB)