Dozer与BeanUtil异同

     为避免项目中各对象间的相互赋值使得程序内部充斥大量的Get/Set方法,所以提供了Dozer与BeanUtil工具,那么Dozer与BeanUtil到底有什么异同呢?
     <1>BeanUtil只能解决两对象属性值相同,类型相同间的赋值,如果属性值不同或者类型不同,就只能进行手工赋值了,所以BeanUtil的灵活性差。
     <2>Dozer相对于BeanUtil就灵活的多,说一下特殊情况下的Dozer处理方式,它可以通过配置xml文件来实现对象间的赋值.
      具体XML一些配置如下:
      <?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net  http://dozer.sourceforge.net/schema/beanmapping.xsd">
  <configuration>  
  <stop-on-errors>true</stop-on-errors>  
  <date-format>yyyy-MM-dd</date-format>  
  <wildcard>true</wildcard>  
  <custom-converters>   
  <converter type=" util.EnumIntConverter">    
  <class-a>java.lang.Enum</class-a>    
  <class-b>java.lang.Integer</class-b>   
  </converter>  
  </custom-converters> 
  </configuration> 
  <mapping date-format="yyyy-MM-dd">  
  <class-a>ce.dozer.User</class-a>  
  <class-b>ce.dozer.UserVO</class-b>  
  <field>   
  <a>info.createDate</a>  
  <b>info.date</b>  
  </field>  
  <field>   
  <a>info.gender</a>   
  <b>info.gender</b>  
  </field>  
  <field>   
  <a>info.createDate</a>   
  <b>info.date</b>  
  </field>  
  <field>   
  <a>name</a>   
  <b>userName</b>  
  </field> 
  </mapping>
  </mappings>
配置完毕后,通过加载XML来实现对象间的赋值
   import net.sf.dozer.util.mapping.DozerBeanMapper;
import java.util.List;
import java.util.ArrayList;

public class MyFirstDozerDemo {
public static void main(String args[]){
  Book book1=new Book();
  book1.setAuthor("dennis");
  book1.setName("dozer demo");
  DozerBeanMapper mapper=new DozerBeanMapper();
  book2=(Book)mapper.map(book1,com.denny_blue.dozerdemo.Book.class);
  CookBook cookBook=new CookBook();
  List myMappingFiles = new ArrayList();
  myMappingFiles.add("dozerBeanMapping.xml");
  mapper.setMappingFiles(myMappingFiles);
  cookBook=(CookBook)mapper.map(book1,CookBook.class);
  System.out.println("cookBook's name:"+   cookBook.getBookName()+"     cookBook's author:"+
                      cookBook.getAuthor());
}
}
通过以上代码就可以灵活的为不同属性,不同类型的两对象进行赋值
<3>Dozer可以与Spring集成
<bean id="mapper" class="org.dozer.spring.DozerBeanMapperFactoryBean">   <property name="mappingFiles"> <list>    <value>classpath*:dozer-config/dozerBeanMapping.xml</value>    </list>   </property>  </bean>
与Spring集成后的基础类中添加如下代码
private Mapper mapper ; public Mapper getMapper() {  return mapper; } public void setMapper(Mapper mapper) {  this.mapper = mapper; } 4.3 3、在继承者类中就可以直接如下使用: getMapper().map(sourceObject, DestinationObject.class)

你可能感兴趣的:(Dozer与BeanUtil)