クラス AbstractSimpleBeanDefinitionParser

実装されたすべてのインターフェース:
BeanDefinitionParser
既知の直属サブクラス
GroovyMarkupConfigurerBeanDefinitionParserScriptTemplateConfigurerBeanDefinitionParser

public abstract class AbstractSimpleBeanDefinitionParser extends AbstractSingleBeanDefinitionParser
解析される要素の属性名と設定される ClassSE のプロパティ名の間に 1 対 1 のマッピングが存在する場合の便利な基本クラス。

比較的単純なカスタム XML 要素から単一の Bean 定義を作成する場合は、このパーサークラスを拡張します。結果の BeanDefinition は、関連する BeanDefinitionRegistry に自動的に登録されます。

例がうまくいけば、この特定のパーサークラスの使用がすぐに明確になります。次のクラス定義を検討してください。

public class SimpleCache implements Cache {

     public void setName(String name) {...}
     public void setTimeout(int timeout) {...}
     public void setEvictionPolicy(EvictionPolicy policy) {...}

     // remaining class definition elided for clarity...
 }

次に、上記のクラスのインスタンスを簡単に構成できるように、次の XML タグが定義されていると仮定します。

<caching:cache name="..." timeout="..." eviction-policy="..."/>

上記の XML タグを実際の SimpleCache Bean 定義に解析するパーサーの作成を担当する Java 開発者に必要なことは、次のとおりです。

public class SimpleCacheBeanDefinitionParser extends AbstractSimpleBeanDefinitionParser {

     protected Class getBeanClass(Element element) {
         return SimpleCache.class;
     }
 }

AbstractSimpleBeanDefinitionParser は、作成された Bean 定義へのプロパティ値の入力に限定されていることに注意してください。提供された XML 要素からコンストラクター引数とネストされた要素を解析する場合は、postProcess(org.springframework.beans.factory.support.BeanDefinitionBuilder, org.w3c.dom.Element) メソッドを実装して、そのような解析を自分で行うか、(可能性が高い)AbstractSingleBeanDefinitionParser または AbstractBeanDefinitionParser クラスを直接サブクラス化する必要があります。

SimpleCacheBeanDefinitionParser を Spring XML 解析インフラストラクチャに実際に登録するプロセスは、Spring Framework リファレンスドキュメント(付録の 1 つ)で説明されています。

このパーサーの動作例(いわば)については、UtilNamespaceHandler.PropertiesBeanDefinitionParser のソースコードを参照してください。注意深い(そしてそれほど注意深くない)リーダーは、実装にコードがほとんどないことにすぐに気づくでしょう。PropertiesBeanDefinitionParser は、次のような XML 要素から PropertiesFactoryBean を生成します。

<util:properties location="jdbc.properties"/>

注意深いリーダーは、<util:properties/> 要素の唯一の属性が PropertiesFactoryBean の PropertiesLoaderSupport.setLocation(org.springframework.core.io.Resource) メソッド名と一致することに気づくでしょう(このように示されている一般的な使用箇所は、任意の数の属性に当てはまります)。PropertiesBeanDefinitionParser が実際に必要なことは、PropertiesFactoryBean 型を返す AbstractSingleBeanDefinitionParser.getBeanClass(org.w3c.dom.Element) メソッドの実装を提供することだけです。

導入:
2.0
作成者:
Rob Harrop, Rick Evans, Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • AbstractSimpleBeanDefinitionParser

      public AbstractSimpleBeanDefinitionParser()
  • メソッドの詳細

    • doParse

      protected void doParse(ElementSE element, ParserContext parserContext, BeanDefinitionBuilder builder)
      提供された ElementSE を解析し、必要に応じて提供された BeanDefinitionBuilder を入力します。

      この実装は、提供された要素に存在するすべての属性を PropertyValue インスタンスにマップし、adds thembuilder にマップします。

      extractPropertyName(String) メソッドは、属性の名前と JavaBean プロパティの名前を一致させるために使用されます。

      オーバーライド:
      クラス AbstractSingleBeanDefinitionParserdoParse 
      パラメーター:
      element - 解析される XML 要素
      builder - BeanDefinition の定義に使用
      parserContext - 解析プロセスの現在の状態をカプセル化するオブジェクト
      関連事項:
    • isEligibleAttribute

      protected boolean isEligibleAttribute(AttrSE attribute, ParserContext parserContext)
      指定された属性が対応する Bean プロパティ値に変換できるかどうかを判断します。

      デフォルトの実装では、"id" 属性および名前空間宣言属性を除き、すべての属性が適格であると見なされます。

      パラメーター:
      attribute - チェックする XML 属性
      parserContext - ParserContext
      関連事項:
    • isEligibleAttribute

      protected boolean isEligibleAttribute(StringSE attributeName)
      指定された属性が対応する Bean プロパティ値に変換できるかどうかを判断します。

      デフォルトの実装では、"id" 属性を除き、すべての属性が適格と見なされます。

      パラメーター:
      attributeName - 解析される XML 要素から直接取得された属性名 (非 null)
    • extractPropertyName

      protected StringSE extractPropertyName(StringSE attributeName)
      指定された属性名から JavaBean プロパティ名を抽出します。

      デフォルトの実装では、Conventions.attributeNameToPropertyName(String) メソッドを使用して抽出を実行します。

      返される名前は、標準の JavaBean プロパティ名の規則に従う必要があります。たとえば、setter メソッド 'setBingoHallFavourite(String)' を持つクラスの場合、返される名前は 'bingoHallFavourite'(正確に大文字と小文字を区別する)の方がよいでしょう。

      パラメーター:
      attributeName - 解析される XML 要素から直接取得された属性名 (非 null)
      戻り値:
      抽出された JavaBean プロパティ名 (null であってはならない)
    • postProcess

      protected void postProcess(BeanDefinitionBuilder beanDefinition, ElementSE element)
      解析が完了した後、Bean 定義をインスペクション / 変更するために派生クラスが実装できるフックメソッド。

      デフォルトの実装では何も行われません。

      パラメーター:
      beanDefinition - 構築される解析済み(そしておそらく完全に定義済み)の Bean 定義
      element - Bean 定義のメタデータのソースであった XML 要素