小编典典

如何扩展JAXB,CXF或Hibernate工具生成的Java代码?

hibernate

使用生成的Java源代码,例如

  • 用Hibernate工具生成的代码
  • 用JAXB模式绑定(xjc)生成的代码
  • WDSL2Java(cxf)生成的代码

所有生成的类都是“值对象”类型,没有业务逻辑。而且,如果我将方法添加到生成的源代码中,那么如果我重复源代码的生成,则将丢失这些方法。

这些Java代码生成工具是否提供“扩展”所生成代码的方法?

例如,

  • 覆盖ToString方法(用于记录)
  • 实施访客模式(用于数据分析/验证)

阅读 270

收藏
2020-06-20

共1个答案

小编典典

对于JAXB,请参阅添加行为

基本上,您将JAXB配置为返回通常期望的对象的自定义实例。在下面的示例中,您将创建一个新的对象PersonEx,该对象扩展了JAXB对象Person。这种机制之所以有效,是因为您是从生成的类派生的,而不是完全不更改JAXB类或模式。

package org.acme.foo.impl;

class PersonEx extends Person {
  @Override
  public void setName(String name) {
    if(name.length()<3) throw new IllegalArgumentException();
    super.setName(name);
  }
}

@XmlRegistry
class ObjectFactoryEx extends ObjectFactory {
  @Override
  Person createPerson() {
    return new PersonEx();
  }
}

请注意,@ Override指令在您的JAXB对象发生更改的情况下非常重要-它将防止您的自定义变得 孤立

2020-06-20