Время выполнения полиморфизма с использованием Spring IOC - PullRequest
0 голосов
/ 31 мая 2018

У меня есть этот конкретный вопрос относительно весеннего МОК.Я хочу достичь полиморфизма во время выполнения с помощью Spring.

Я могу добиться того же, используя если иное, но я хотел бы знать правильный пружинный способ сделать это.

Требование:

У меня есть интерфейс MyInterface.

ImplA & ImplB реализует MyInterface.

У меня есть служба, которая отправляет "A" или "B".На основании параметра запроса я хочу ввести ImplA или ImplB в мой контроллер.

Пожалуйста, предложите, как лучше реализовать это весной, используя внедрение зависимостей

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Если вы используете базовую конфигурацию аннотации пружины, попробуйте:

  @Bean(name = "aImpl")
  public MyInterface a() {
    return new AImpl();
  }

  @Bean(name = "bImpl")
  public MyInterface b() {
    return new BImpl();
  }

Чтобы получить правильный экземпляр интерфейса, уточните имя компонента с помощью @Qualifier

    @Autowired
    @Qualifier("a")
    MyInterface aImpl;


    @Autowired
    @Qualifier("b")
    MyInterface bImpl;
0 голосов
/ 31 мая 2018

Есть много способов достичь этого.Пара идей с моей точки зрения:

  1. Используйте шаблон Factory, чтобы вернуть нужный компонент на основе значения параметра.
  2. Поместите оба компонента в карту и используя значения параметров какключ.Когда вам нужен боб, возьмите его с карты.

Дайте мне знать, если вам нужна дополнительная информация.

0 голосов
/ 31 мая 2018

Вы можете использовать applicationContext.getBean("beanName") внутри вашего метода контроллера. Здесь - пример программы.Вы можете получить правильное значение в зависимости от вашего состояния.

...