首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring依赖注入的自定义转换器

使用Spring依赖注入的自定义转换器
EN

Stack Overflow用户
提问于 2011-07-14 23:35:47
回答 6查看 13K关注 0票数 3

有没有办法在Dozer中定义一个自定义转换器,用于将一个顶级类型转换为另一个顶级类型,该顶级类型本身就是一个Spring bean,因此可以注入其依赖项?

dozer文档建议添加以下XML定义:

代码语言:javascript
复制
  <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呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-07 03:54:58

如果您的自定义转换器是spring bean,那么Dozer bean映射器的属性'customConvertersWithIds‘可以用来引用转换器spring bean。然后使用这个id来引用映射中的自定义转换器。下面是我如何让它为我工作的:

代码语言:javascript
复制
<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")

下面是一个映射示例:

代码语言:javascript
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2011-09-09 19:26:35

在前面的回答中,除了CustomConverterWithIds之外,还可以注入自定义转换器,以覆盖映射文件中配置部分中定义的转换器。这样,dozer将使用注入的转换器,而不是使用默认构造函数实例化一个。

代码语言:javascript
复制
<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>
票数 9
EN

Stack Overflow用户

发布于 2011-07-22 01:17:24

不幸的是,这不受支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6695884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档