在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类之一的代码如下:

@Component

public 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

回到顶部