在Spring中需要多个相同类型的bean
将请求标记为重复之前的请求。我浏览了论坛,在任何地方都找不到解决问题的方法。
我正在使用Spring 3.2编写代码,所有内容都完全基于注释。该代码接收从不同XSD文件派生的XML文件。
可以这么说,有五个不同的XSD(A1,A2,A3,A4,A5),我的代码可以接收任何类型的XML,并且我有逻辑可以在到达时识别XML的类型。
现在,我尝试使用Spring OXM解组这些文件。但是由于涉及多个XSD,因此我们实际上不能使用一个Un-marshaller。因此,我们需要大约五个。
在Configuration
课堂上,我添加了五个如下所示的bean:
@Bean(name="A1Unmarshaller")public Jaxb2Marshaller A1Unmarshaller(){
Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller();
unMarshaller.setContextPath("package name for the classes generate by XSD A1");
}
@Bean(name="A2Unmarshaller")
public Jaxb2Marshaller A1Unmarshaller(){
Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller();
unMarshaller.setContextPath("package name for the classes generate by XSD A2");
}
@Bean(name="A3Unmarshaller")
public Jaxb2Marshaller A3Unmarshaller(){
Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller();
unMarshaller.setContextPath("package name for the classes generate by XSD A3");
}
@Bean(name="A4Unmarshaller")
public Jaxb2Marshaller A4Unmarshaller(){
Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller();
unMarshaller.setContextPath("package name for the classes generate by XSD A4");
}
@Bean(name="A5Unmarshaller")
public Jaxb2Marshaller A5Unmarshaller(){
Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller();
unMarshaller.setContextPath("package name for the classes generate by XSD A5");
}
现在我有五个不同的类C1,C2,C3,C4和C5,我正尝试将一个解组器bean注入一个类。这意味着A1Unmarshaller
会自动连线到C1
等等。
构建Spring上下文时,它抛出一个错误,说它期望一个类型的bean Jaxb2Marshaller
并得到五个。
使用XML配置完成后效果很好,因此我不确定是否丢失了某些内容。请帮忙。
C1类之一的代码如下:
@Componentpublic class C1{
@Autowired
private Jaxb2Marshaller A1Unmarshaller;
A1 o = null
public boolean handles(String event, int eventId) {
if (null != event&& eventId == 5) {
A1 = A1Unmarshaller.unMarshal(event);
return true;
}
return false;
}
}
回答:
您应该对自动装配变量进行限定,以表明应该注入哪个变量
@Autowired@Qualifier("A1Unmarshaller")
private Jaxb2Marshaller A1Unmarshaller;
默认的自动装配是按类型而不是按名称进行的,因此,当有多个相同类型的bean时,必须使用@Qualifier批注。
以上是 在Spring中需要多个相同类型的bean 的全部内容, 来源链接: utcz.com/qa/434352.html