JAXB:如何使用Spring自动生成的类?

时间:2011-01-13 11:14:42

标签: java spring collections jaxb xjc

我使用xjcXSD生成Java类。结果类仅包括集合类型的getter方法,例如List,但没有setter方法。如何在Spring Framework中将这些生成的类用作bean,即如何使用 applicationContext.xml 中的数据填充这些字段?

作为对'duffymo'和'fatih'的回复:实际上我可以告诉Spring使用JAXB ObjectFactory及其工厂方法来创建bean,

<bean id="myFactory" class="generated.ObjectFactory" />
<bean id="myBean" factory-bean="myFactory" factory-method="createMyBeanMethod" />

剩下的问题是如何在没有setter方法的情况下填充集合字段?

5 个答案:

答案 0 :(得分:0)

我不相信你可以,因为它们是在JAXB的控制下创建的,而不是Spring bean工厂。

答案 1 :(得分:0)

您可以使用该字段代替getter / setter。

答案 2 :(得分:0)

由于生成的代码在JAXB的控制之下,你将无法做到这一点。但是,解决方法可能是:

假设JAXB为您创建了一个Person类,生成的属性将受到保护。

您可以创建扩展Person类的新类MyPerson,并将setter方法放在MyPerson类中。因此,您可以从bean配置文件初始化属性,生成的代码不会覆盖您的更改。对于您的案例,它可能是也可能不是合适的解决方法,因为我不知道细节。

     generated :
     public class Person{
          protected List<Something> somethingList;
          .
          .
     }




     class MyPerson extends Person{
         public void setList(List<Something> somethingList){
             this.somethingList= somethingList;
         }

     }

答案 3 :(得分:0)

有一个扩展来为列表生成set方法,如下所示:

虽然给定的链接似乎已被破坏,因为引用的网站已被重新组织。

值得向java.net发布一个问题,以获取collection-setter-injector的位置。

答案 4 :(得分:0)

您可以将Java-based configuration用于那些bean,而不是在applicationContext.xml中填充xjc-generated bean。