Erforderlich Mehrere Bohnen desselben Typs im Frühjahr

Eine Anfrage, bevor Sie sie als Duplikat markieren. Ich habe das Forum durchgesehen und konnte nirgendwo eine Lösung für das Problem finden.

Ich schreibe einen Code mit Spring 3.2 und alles basiert nur auf Anmerkungen. Der Code empfängt XML-Dateien, die von verschiedenen XSD-Dateien abgeleitet sind.

Wir können also sagen, dass es fünf verschiedene XSDs gibt (A1, A2, A3, A4, A5) und mein Code XML von jedem Typ empfängt, und ich habe die Logik, den Typ des XML bei der Ankunft zu identifizieren.

Jetzt versuche ich, diese mit Spring OXM zu entfernen. Da es sich jedoch um mehrere XSDs handelt, können wir keinen einzigen Un-Marshaller verwenden. Wir brauchen also ungefähr fünf davon.

In demConfiguration Klasse, ich habe fünf Bohnen wie folgt hinzugefügt:

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

Jetzt habe ich fünf verschiedene Klassen C1, C2, C3, C4 und C5 und ich versuche, einer Klasse eine unmarshaller Bohne zu injizieren. Das bedeutetA1Unmarshaller wird automatisch mit verdrahtetC1 und so weiter.

Wenn der Spring-Kontext erstellt wird, wird ein Fehler ausgegeben, der besagt, dass eine Bean des Typs erwartet wurdeJaxb2Marshaller und bekam fünf.

Hinweis Nach Abschluss der XML-Konfiguration hat es problemlos funktioniert, sodass ich nicht sicher bin, ob mir etwas fehlt. Bitte helfen Sie.

BEARBEITEN Der Code für eine der Klassen C1 ist unten:

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

}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage