0

これは、どの Bean がどの名前空間に属しているかを正確に推測できるように、XML の一般的な名前空間設計パターンに従っていますか? そうでない場合、正確な評価を行うために基になる API を調べるにはどうすればよいですか?

4

1 に答える 1

1

見つけることはできますが、いくつかのコードを掘り下げる必要があります。名前空間を処理するためのエントリ ポイントは、 の実装ですorg.springframework.beans.factory.xml.NamespaceHandlerorg.springframework.beans.factory.xml.BeanDefinitionParserこの実装は通常、その名前空間のさまざまな最上位要素を処理するために、いくつかの実装をセットアップします。

NamespaceHandler実装は通常、サポートするスキーマに従って名前が付けられますが、それは保証されていません。spring.handlers特定の名前空間を担当するハンドラーを確実に判断するには、その名前空間ハンドラーを定義するファイルを見つける必要があります。そのファイルは、含まれている jar の META-INF フォルダーにあります。

例: spring-tx-[version].jar の META-INF フォルダーにはspring.handlers、次の行を含むファイルがあります。

http\://www.springframework.org/schema/tx=org.springframework.transaction.config.TxNamespaceHandler

つまり、tx名前空間は によって処理されますTxNamespaceHandler。そのハンドラのソースコードをinit()見ると、

registerBeanDefinitionParser("advice", new TxAdviceBeanDefinitionParser());

これは、<tx:advice>Spring xml のステートメントが によって処理されることを意味しますorg.springframework.transaction.config.TxAdviceBeanDefinitionParser。同様の方法で任意spring.handlersにドリルダウンできます。NamespaceHandler

于 2012-05-08T12:48:58.443 に答える