Requis Plusieurs beans de même type au printemps

Une demande avant que vous marquez comme en double. J'ai parcouru le forum et je ne pouvais pas trouver la solution pour le problème de n'importe où.

Je suis en train d'écrire un code à l'aide de Printemps 3.2 et tout ce qui est purement annotation de base. Le code reçoit des fichiers XML qui sont issus de différents fichiers XSD.

L'on peut dire, il y a cinq différents XSD ( A1, A2, A3, A4, A5) et mon code reçoit XML de tout type, et j'ai de la logique pour identifier le type de XML à l'arrivée.

Maintenant, je suis en train de l'onu-le maréchal à l'aide de Printemps OXM. Mais, car il y a plusieurs XSDs impliqués, nous ne pouvons pas réellement à l'aide de l'une des nations Unies-marshaller. Donc nous avons besoin d'environ cinq d'entre eux.

Dans le Configuration classe, j'ai ajouté cinq haricots comme ci-dessous:

@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");
}

Maintenant, j'ai cinq différentes classes C1, C2, C3, C4 et C5 et je suis en train d'injecter un unmarshaller fève dans une classe. Cela signifie que A1Unmarshaller est autocâblés à C1 et ainsi de suite.

Au Printemps lorsque le contexte est construit, il renvoie une erreur indiquant qu'il attend un bean de type Jaxb2Marshaller et a obtenu cinq.

Note Il a bien fonctionné lors de la fait en utilisant la configuration XML, donc je ne sais pas si je suis absent quelque chose. S'il vous plaît aider.

MODIFIER Le code pour l'une des classes C1 est ci-dessous:

@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;
}

}

source d'informationauteur dharam | 2013-09-10