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をテンプレートとして作成し、他のユーザーがインスタンス化できないようにする場合は、
これで、「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)