小编典典

在Spring中需要多个相同类型的bean

spring-mvc

将请求标记为重复之前的请求。我浏览了论坛,在任何地方都找不到解决问题的方法。

我正在使用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;
}

}


阅读 1571

收藏
2020-06-01

共1个答案

小编典典

您应该对自动装配变量进行限定,以表明应该注入哪个变量

@Autowired
@Qualifier("A1Unmarshaller")
private Jaxb2Marshaller A1Unmarshaller;

默认的自动装配是按类型而不是按名称进行的,因此,当有多个相同类型的bean时,必须使用@Qualifier批注。

2020-06-01