有没有办法在Dozer中定义一个自定义转换器,用于将一个顶级类型转换为另一个顶级类型,该顶级类型本身就是一个Spring bean,因此可以注入其依赖项?
dozer文档建议添加以下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呢?
发布于 2011-09-07 03:54:58
如果您的自定义转换器是spring bean,那么Dozer bean映射器的属性'customConvertersWithIds‘可以用来引用转换器spring 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-09 19:26:35
在前面的回答中,除了CustomConverterWithIds之外,还可以注入自定义转换器,以覆盖映射文件中配置部分中定义的转换器。这样,dozer将使用注入的转换器,而不是使用默认构造函数实例化一个。
<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-07-22 01:17:24
不幸的是,这不受支持。
https://stackoverflow.com/questions/6695884
复制相似问题