Требуется несколько бобов одного типа в Spring
Запрос, прежде чем пометить его как дубликат. Я прошел форум и нигде не смог найти решения проблемы.
Я пишу код с использованием Spring 3.2, и все чисто аннотации. Код получает файлы XML, которые получены из разных файлов XSD.
Таким образом, мы можем сказать, что существует пять различных XSD (A1, A2, A3, A4, A5), и мой код получает XML любого типа, и у меня есть логика для определения типа XML по прибытии.
Теперь я пытаюсь разархивировать их с помощью Spring OXM. Но поскольку задействовано несколько XSD, мы не можем использовать один Un-marshaller. Итак, нам нужно около пяти из них.
вConfiguration
класс, я добавил пять бобов, как показано ниже:
@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, и я пытаюсь внедрить один бин unmarshaller в один класс. Это значитA1Unmarshaller
автоматически подключен кC1
и так далее.
Когда контекст Spring создается, он выдает ошибку, сообщающую, что ожидается один компонент типа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;
}
}