从xml动态生成java bean类有什么好处?

时间:2011-05-26 04:31:25

标签: java jaxb

我使用IDE编写了很多java bean类。另一个人建议采用不同的方法。他建议我在其中放置一个带有bean定义的xml文件。然后我使用jaxb或xslt在构建期间动态生成类。虽然它是一种新颖而有趣的方法,但我认为它没有任何重大好处。

我认为这种建议的方法只有一个好处:不需要在配置控制中维护java bean类。任何bean更改都只需要在xml文件中进行更新。

动态生成java类有什么主要好处吗?有没有其他理由采用这种方法?

2 个答案:

答案 0 :(得分:2)

我同意@Akhilss。我的经验是大规模的Java EE项目,其中代码生成很常见。

这一切都取决于你的项目。如果您只编写几个bean并且只需要基本功能,那么我不认为需要从XML开始(无论如何经常过度使用)。特别是如果你实际上也不需要XML。

但是,如果您正在构建一个需要XML的系统,例如SOAP Web服务WSDL和模式,那么生成是一个好主意,因为它可以避免手动保持模式和bean同步。以及提供工厂类和其他支持代码。

作为一个反驳论点,使用EJB3和类似的标准,现在通常更容易编写bean并动态生成凌乱的XML内容。 IE浏览器。让服务器完成繁重的工作。

考虑代码生成的另一个原因是,如果您在bean中需要更复杂的功能,因为它们代表数据结构。几年前,我试用了Apache Tuscany项目,用于从XML生成SDO bean。关于这一点的好处是我可以生成属性更改通知等功能,因此当我修改任何bean的属性(包括集合)时,可以自动通知程序的其他部分。如果需要,生成的功能可以为您节省大量时间和金钱。

最终,我建议坚持KISS原则。所以不要添加你不需要的东西。如果从长远来看它可以帮助您,那么从XML生成的代码非常有用。但是,与任何技术一样,请确保您出于正确的原因添加它。

答案 1 :(得分:1)

我在项目中使用了Jibx及其生成器。我的经历好坏参半。

  1. http://static.springsource.org/spring-ws/site/reference/html/why-contract-first.html中提到了使用JAXB(XJC)生成器的常见情况 与XML的转换使得可以存储在数据库中并检索以供将来使用以及用于功能测试的测试用例输入。

  2. 使用任何类型的生成器(Jaxb,Jibx,XMLBeans,Custom)可能对大型项目有意义。它允许标准化数据类型(如财务金额的BigDecimal,如所有列表的ArrayList),强制接口(如Serializable或Cloneable)。这可以强制执行良好实践,并减少对生成文件进行审核的需要。

  3. 它允许通过XSLT注入代码或生成的java文件的后处理。示例是对于financialAmount类型的每个字段,使用setter方法中的特定策略(UP,DOWN,NEAR)将舍入代码注入特定的十进制大小(2,6,9)。强制执行此类行为确实可以减少错误的实例(对于公司负责的不正确的财务价值)。

  4. 缺点是

    1. 通常每个java类只能是一个bean类。任何自定义都将被覆盖。因为(在我的情况下)生成器绑定到构建过程。每次构建都会生成类。

    2. 您不能在bean类上实现自定义接口,也不能为自己的或第三方框架添加注释。

    3. 由于通常会生成默认构造函数,因此无法轻松实现工厂方法之类的模式。重构通常很困难,因为发电机通常不支持它。

    4. 您可能(现在不确定,几年前为Jibx确实如此)在最适用时无法生成ENUMS。

    5. 无论是否需要,您都可能无法使用自己的数据类型覆盖默认数据类型。 CopyOnWrite列表而不是ArrayList,用于跨线程共享的变量或List的自定义实现,它也实现了Observer模式。

    6. 发电机的好处超过了大型(人员而非代码,认为三个地点的150名开发人员)分布式项目的成本。您可以通过定义包含bean的自定义类并实现行为或后处理(添加其他代码)以及从XSD注释或其他配置文件中获取的其他元数据来解决这些缺点。记住发电机的支持和维护变得至关重要,因为整个项目依赖于它。请谨慎使用。

      对于规模较小的项目,我个人会写自己的课程。对于规模较大的项目,我个人不会在中间层使用它,主要是因为缺乏重构支持。它可以用于意图绑定到UI框架的简单bean。