![]() |
1
1
有很多方法可以解决这个问题。 实用程序类
最简单的方法是在实用程序类中简单地实现访问路由。所以基本上你会说
使用代码注入器插件可以使用XJC代码注入器插件在生成的类中插入任何代码。请参阅以下问题作为示例: Inserting code with XJC+xsd+jxb using the options " -Xinject-code -extension " (如果你有问题,请再问一个问题。我意识到我们没有进入XJC代码注入器的问题 jaxb ) 这对您来说相对容易,并且允许您插入您想要的任何代码。 缺点是Java代码的一部分将驻留在一个奇怪的XML文件中。 扩展准备好的抽象类
另一个选项是使用所需的访问器方法(例如,
有许多方法可以使模式派生类扩展现有类。这是其中之一: JAXB Marshalling - extending an existing class 或者可以使用继承插件 JAXB2 Basics . 免责声明: 我是作者。 不是扩展类,而是使用模板方法+访问器的默认方法定义接口,并让模式派生类实现它。 我不喜欢这个选项,因为它错误地使用继承只添加实用方法。 编写自己的XJC插件您想要添加的访问器后面可能有一些特定的逻辑。因此,也许您可以根据“特定逻辑”实际生成访问器,而不是简单地注入代码(如代码注入器插件)。 然而,这是一个非常复杂的方法。见 this answer 简要概述。如果真的有“特定的逻辑”,我就接受它。 建议我个人更喜欢将我的业务逻辑与模式派生类分开。我可能是那边最大的JAXB/XJC粉丝之一。我肯定会编写一个实用程序类,它提供您想要的任何访问器。 我不喜欢代码注入器选项,因为这样您就可以将部分代码保存在一些奇怪的XML文件中。因此,例如,如果您在一个IDE中重构任何东西,那么代码就不会被触及。 扩展一个准备好的抽象类或实现一个准备好的接口也是我不喜欢的。我认为添加一些实用程序代码只是对OOP结构的滥用。 对于没有XJC插件经验的开发人员来说,编写自己的插件太复杂了。另外,我无法识别“特定逻辑”,它可以被某种程度的概括,所以这个选项可能甚至没有意义。 |
![]() |
Mohan Seth · 我可以在外观设计模式中使用接口吗? 8 年前 |