规范化Java bean属性名称

sli*_*lim 9 java javabeans

我有一堆第三方Java类,它们使用不同的属性名称来实现相同的属性:

public class Foo {
   public String getReferenceID();
   public void setReferenceID(String id);
   public String getFilename();
   public void setFilename(String fileName);
}

public class Bar {
   public String getRefID();
   public void setRefID(String id);
   public String getFileName();
   public void setFileName(String fileName);
}
Run Code Online (Sandbox Code Playgroud)

我希望能够以规范化的形式解决这些问题,以便我可以多态地对待它们,以便我可以使用Apache BeanUtils来完成这些工作:

PropertyUtils.copyProperties(object1,object2);
Run Code Online (Sandbox Code Playgroud)

显然,为每个类编写一个适配器是微不足道的......

public class CanonicalizedBar implements CanonicalizedBazBean {
    public String getReferenceID() {
        return this.delegate.getRefID();
    }
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

但我想知道那里有更普遍和动态的东西吗?什么东西需要一对多的属性名称等价映射,以及委托类,并生成适配器?

JB *_*zet 6

我从未使用它,但我认为你在寻找Dozer:

Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象.通常,这些Java Bean将具有不同的复杂类型.

Dozer支持简单属性映射,复杂类型映射,双向映射,隐式显式映射以及递归映射.这包括映射还需要在元素级别进行映射的集合属性.

Dozer不仅支持属性名称之间的映射,还支持在类型之间自动转换.大多数转换方案都是开箱即用的,但Dozer还允许您通过XML指定自定义转换.