Инъекция Боба во время выполнения

Можно ли внедрить боб в службу во время выполнения? Я работаю над приложением Spring MVC и имею два разных компонента, которые используют одну и ту же функциональность. Мне нужно ввести Боб во время выполнения на основе некоторых параметров. Как это сделать весной?

1 ответ

  1. Если вы хотите переключаться между уже созданными бобами
    затем используйте этот метод

    Autowire ApplicationContext в классе

    @Autowired ApplicationContext ctx;
    

    И в методе, просто получить эти бобы из ApplicationContext и переключаться между ними. Я бы использовал интерфейс, а затем эти 2 (или более) класса (которые вы хотите переключить во время выполнения) реализуют интерфейс так, что будет контракт.

    BeanInterface beanName; 
    if (x){
      beanName = (BeanClass1) ctx.getBean("beanClass1");
    }
    else{
      beanName = (BeanClass2) ctx.getBean("beanClass2");
    }
    

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

    Если вы хотите, чтобы даже создание компонента основывалось на определенных параметрах среды выполнения, посмотрите здесь https://stackoverflow.com/a/34350983/6785908