【问题标题】:How to add custom behaviors to JAXB generated classes. Custom not overriding existing methods如何向 JAXB 生成的类添加自定义行为。自定义不覆盖现有方法
【发布时间】:2010-12-18 03:35:09
【问题描述】:

我从无法控制的外部来源获得了 xsd。现在我们想向 JAXB 生成的类添加自定义方法,这样对象就可以更多地了解自己,而不是成为一个带有 getter 和 setter 的简单 POJO。

这个想法就像一旦我们实现了这种类型的方法,我们就不需要深入了解水合对象,而是通过调用自定义方法向对象询问我们需要的特定信息并且可以获得我们想要的东西?

当然还有传统的编程方法,在这种方法中,我不断深入研究根对象的子对象的子对象,对每个子对象调用 getter 方法并实现业务逻辑。但不知何故,这里的团队不希望这样。

到目前为止,我采用的一种方法是蛮力方法。就像我使用 JAXB 从 XSD 生成类一样。然后我有一个外部实用程序(现在这是一个独立的 java 程序),它在运行时会读取特定目录中的一些文本文件(以我们自己的方式构造,以找出应该使用哪个方法以及进入哪个 .java 文件)它包含自定义方法,并将这些方法移动到适当的 JAXB 生成的类。每次获得新版本的 XSD 时,我都需要生成类、调用此实用程序并可能解决一些编译问题等,以防 JAXB 生成的类中有一些变量更改。该实用程序运行良好。但我想知道这个。

有没有更好的方法来做到这一点?我检查了互联网。给出了一些解决方案,但它们只是覆盖 JAXB 生成的对象中现有的 get 方法,而不是添加全新的方法。

请提出建议。

【问题讨论】:

    标签: java jaxb bind behavior


    【解决方案1】:

    嗯,“最简洁的方法”是使用面向方面的编程 (AOP),它不是在源代码级别而是在运行时执行您所描述的操作。它将方法注入到类中。 AOP 的一种可能实现是AspectJ

    如果 XML shema 不太复杂,则可能的第二种选择是围绕它创建一个包装器。

    您已经描述了第三种选择。但是我认为您可以依靠标准工具而不是自己编写代码-我建议为此使用标准的差异/补丁工具。只要您的代码样式是固定的,从现有的已修改 java 文件创建差异并将其应用于新生成的 JAXB 代码就不会太复杂。

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2012-05-04
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多