3

トップレベルの型を別の型に変換するカスタム コンバーターを Dozer で定義する方法はありますか?それはそれ自体が Spring Bean であり、その依存関係を注入することができますか?

ドーザーのドキュメントでは、次の XML 定義を追加することを提案しています。

  <converter type="org.dozer.converters.TestCustomConverter" >
    <class-a>org.dozer.vo.CustomDoubleObject</class-a>
    <class-b>java.lang.Double</class-b>
  </converter>

残念ながら、これにより Dozer がorg.dozer.converters.TestCustomConverter直接インスタンス化され、依存性注入がスキップされます。代わりにSpring Beanを参照する方法はありますか?

4

6 に答える 6

9

前の回答のようにCustomConverterWithIdsの横に、カスタムコンバーターを挿入して、マッピングファイルの構成部分で定義されたコンバーターをオーバーライドすることもできます。そうすれば、ドーザーはデフォルトのコンストラクターを使用してインスタンス化する代わりに、注入されたコンバーターを使用します。

<bean id="dozerMapper" class="org.dozer.DozerBeanMapper" scope="singleton">
    <property name="mappingFiles">
        <list>
            <value><mapping-file-name1></value>
            <value><mapping-file-name2></value>
        </list> 
    </property>
    <property name="customConverters">
        <list>
            <ref bean="entityConverter"/>
        </list>
    </property>
</bean>

<configuration>
   <custom-converters>
     <converter type="my.domain.EntityConverter">
        <class-a>java.lang.Integer</class-a>
        <class-b>my.domain.MyEntity</class-b>
     </converter>
   <custom-converters>
</configuration>

<beans   .... >
   <bean id="entityConverter" class="my.domain.EntityConverter">
        <property ....
   </bean
</beans>
于 2011-09-09T11:26:35.007 に答える
4

カスタム コンバーターがスプリング Bean の場合、Dozer Bean マッパーのプロパティ 'customConvertersWithIds' を使用して、コンバーター スプリング Bean を参照できます。次に、この ID を使用して、マッピングでカスタム コンバーターを参照します。これが私のためにそれを機能させる方法です:

<bean id="dozerMapper" class="org.dozer.DozerBeanMapper" scope="singleton">
        <property name="mappingFiles">
            <list>
                <value><mapping-file-name1></value>
                <value><mapping-file-name2></value>
            </list>
        </property>
        <property name="customConvertersWithId">
            <map>
                <entry key="crbConverter" value-ref="loadableFooBeanConverter"/>
                <entry key="sbConverter" value-ref="loadableXyzBeanConverter"/>
            </map>
        </property>
    </bean>

@component("loadableFooBeanConverter") のように、コンバーター クラスに注釈を付けています。

マッピングの例:

<mapping>
        <class-a>${Abc}</class-a>
        <class-b>${AbcBean}</class-b>
           <field custom-converter-id="sbConverter">
            <a>XyzId</a>
            <b>Xyz</b>
            <b-hint>${XyzBean}</b-hint>
        </field>
</mapping>
于 2011-09-06T19:54:57.853 に答える
0

Spring Bean をカスタム コンバーターとして挿入するために、元の Dozer にパッチを適用しました。私の変更を確認し、受け入れられる場合はそれらを使用できます。更新されたソースはhttps://bitbucket.org/JRS/open-dozerにあります。

カスタム コンバーター レコードをグローバル構成に追加する必要があります。

于 2012-01-17T08:00:06.387 に答える
0

残念ながら、これはサポートされていません。

于 2011-07-21T17:17:23.523 に答える