我使用xjc
从XSD
生成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方法的情况下填充集合字段?
答案 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。