2

Spring でカスタム名前空間を使用することがあります。CXF や ActiveMQ のように。

組み込みの ActiveMQ ブローカー サーバーを宣言する方法の例を次に示します。

<amq:broker useJmx="false" persistent="true">
    <amq:transportConnectors>
        <amq:transportConnector uri="${mobilepush.activemq.broker.transport.connector.uri}" />
    </amq:transportConnectors>
    <amq:persistenceAdapter>
        <amq:kahaPersistenceAdapter directory="${mobilepush.activemq.broker.queue.persistence.directory}" maxDataFileLength="33554432"/>
    </amq:persistenceAdapter>
</amq:broker>

Spring のカスタム名前空間についてはあまり知りませんが、私の意見では、これらの名前空間は、より冗長な Spring Bean 宣言への「ショートカット」を提供しているだけです。

Xebia Management Extras などの一部のライブラリは、ドキュメントでカスタム名前空間と生のスプリング実装の同等性を提供しています。

<management:jms-connection-factory-wrapper 
             id="connectionFactory" 
             connection-factory="rawConnectionFactory" />

次と等しい:

   <bean id="connectionFactory" class="fr.xebia.management.jms.SpringManagedConnectionFactory">
      <property name="connectionFactory" ref="rawConnectionFactory" />
   </bean>

http://code.google.com/p/xebia-france/wiki/ManagedJmsConnectionFactory


しかし、カスタム名前空間のドキュメントが十分に正確でない場合があり、Java クラスに関して内部で何が起こっているのかを理解したいと思います...

だから私が知りたいのは、カスタム名前空間の使用法と同等の生のSpring Bean宣言をどのように取得できるかということです?

IDE に「自動翻訳ツール」は含まれていますか?

私の知る限り、XBean のようなカスタム Spring 名前空間を作成するためのさまざまなツールがあるようです...これらすべてのツールを知らなくても、内部で名前空間がどのように機能するかを理解する自動または手動の方法はありますか?

ありがとう

4

1 に答える 1

3

これは、Spring がカスタム名前空間を処理する方法の良いリファレンスです - http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/extensible-xml.html#extensible-xml-schema

すべてのカスタム名前空間には、さまざまな jar ファイルの spring.handler ファイルを使用して登録される関連付けられたNamespaceHandlerMETA-INF/spring.handlersがあります。

たとえば。コンテキスト名前空間、春に調べると、コンテキスト名前空間の名前空間META-INF/spring.handlersハンドラーが表示されcontext*.jar fileます。

http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler

コンテキスト名前空間の下のタグのさまざまなパーサーを内部的に登録します。

    registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
    registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());

これらのパーサーはそれぞれ、あなたが言及したさまざまな Bean 定義を登録します -

残念ながら、特定のカスタム名前空間に登録されている Bean 定義を見つけるための簡単なツールはありません。特定の BeanDefinition パーサーのコードを調べる必要があります。

ActiveMQ で使用される XBean は、ボイラー プレートの一部を処理することにより、カスタム Namespacehandler を登録するこのプロセスを少し簡素化します。

于 2012-09-03T16:20:19.940 に答える