2015-11-30 1 views
2

Я новичок в весеннем и весеннем ботинках, так что, надеюсь, это не глупый вопрос.Весна Autowire Bean с несколькими интерфейсами Реализация, определение Реализация в методе

У меня есть интерфейс с несколькими реализациями. Реализации аннотируются с @Component("NameOfImpl").

Моя цель состоит в том, чтобы автоуведовать фасоль с выбранной реализацией. В обычном случае я могу сделать это с @Autowired @Qualifier("NameOfImpl"), но моя проблема, я хочу, чтобы выбрать осуществления в способе, как:

public void doSomethingMethod(){ 
     for(String line: configFile){ 
       String[] values = line.split(";"); 

       if (values[0].equals("A")) { 
        //here I want to select an bean implementation 

       } 
       else if (values[0].equals("B")) { 
        //here I want to select another bean implementation 

       } 
     } 
     bean.doSomething(); 
    } 

Как я могу добиться этого? Что ты предлагаешь? Спасибо!

+0

вы можете удалить, поскольку автоматическое связывание вы инстанцирование реализаций вручную –

+0

Моя цель не инстанцировать их вручную – user3287019

+0

с помощью 'new' средств Создание экземпляра .. –

ответ

7

Вы можете попросить Spring ввести Map бобов. Ключами на карте будут имена бобов.

Если у вас есть интерфейс с именем Example

public interface Example { 

} 

И две реализации:

@Component("foo") 
public class FooExample implements Example { 

} 

@Component("bar") 
public class BarExample implements Example { 

} 

Вы можете иметь карту Example бобов впрыскивается:

@Component 
public class ExampleConsumer { 

    private final Map<String, Example> examples; 

    @Autowired 
    public ExampleConsumer(Map<String, Example> examples) { 
     this.examples = examples; 
    } 
} 

В этом случае карта будет содержать две записи:

  • "foo" ->FooExample экземпляр
  • "bar" ->BarExample экземпляр
+0

Это невероятно удивительно, спасибо Энди! – pelumi

 Смежные вопросы

  • Нет связанных вопросов^_^