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) メソッドの実装を提供することだけです。
Conventions.attributeNameToPropertyName(String)ID_ATTRIBUTE, NAME_ATTRIBUTE| コンストラクターと説明 |
|---|
AbstractSimpleBeanDefinitionParser() |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected void | doParse(ElementSE element, ParserContext parserContext, BeanDefinitionBuilder builder) 提供された ElementSE を解析し、必要に応じて提供された BeanDefinitionBuilder を入力します。 |
protected StringSE | extractPropertyName(StringSE attributeName) 指定された属性名から JavaBean プロパティ名を抽出します。 |
protected boolean | isEligibleAttribute(AttrSE attribute, ParserContext parserContext) 指定された属性が対応する Bean プロパティ値に変換できるかどうかを判断します。 |
protected boolean | isEligibleAttribute(StringSE attributeName) 指定された属性が対応する Bean プロパティ値に変換できるかどうかを判断します。 |
protected void | postProcess(BeanDefinitionBuilder beanDefinition, ElementSE element) 解析が完了した後、Bean 定義をインスペクション / 変更するために派生クラスが実装できるフックメソッド。 |
doParse, getBeanClass, getBeanClassName, getParentName, parseInternalparse, postProcessComponentDefinition, registerBeanDefinition, resolveId, shouldFireEvents, shouldGenerateId, shouldGenerateIdAsFallback, shouldParseNameAsAliasescloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEprotected void doParse(ElementSE element, ParserContext parserContext, BeanDefinitionBuilder builder)
ElementSE を解析し、必要に応じて提供された BeanDefinitionBuilder を入力します。 この実装は、提供された要素に存在するすべての属性を PropertyValue インスタンスにマップし、adds them を builder にマップします。
extractPropertyName(String) メソッドは、属性の名前と JavaBean プロパティの名前を一致させるために使用されます。
AbstractSingleBeanDefinitionParser の doParse element - 解析される XML 要素 builder - BeanDefinition の定義に使用 parserContext - 解析プロセスの現在の状態をカプセル化するオブジェクト extractPropertyName(String)protected boolean isEligibleAttribute(AttrSE attribute, ParserContext parserContext)
デフォルトの実装では、"id" 属性および名前空間宣言属性を除き、すべての属性が適格であると見なされます。
attribute - チェックする XML 属性 parserContext - ParserContextisEligibleAttribute(String)protected boolean isEligibleAttribute(StringSE attributeName)
デフォルトの実装では、"id" 属性を除き、すべての属性が適格と見なされます。
attributeName - 解析される XML 要素から直接取得された属性名 (非 null)protected StringSE extractPropertyName(StringSE attributeName)
デフォルトの実装では、Conventions.attributeNameToPropertyName(String) メソッドを使用して抽出を実行します。
返される名前は、標準の JavaBean プロパティ名の規則に従う必要があります。たとえば、setter メソッド 'setBingoHallFavourite(String)' を持つクラスの場合、返される名前は 'bingoHallFavourite'(正確に大文字と小文字を区別する)の方がよいでしょう。
attributeName - 解析される XML 要素から直接取得された属性名 (非 null)null であってはならない)protected void postProcess(BeanDefinitionBuilder beanDefinition, ElementSE element)
デフォルトの実装では何も行われません。
beanDefinition - 構築される解析済み(そしておそらく完全に定義済み)の Bean 定義 element - Bean 定義のメタデータのソースであった XML 要素