У меня есть такая проблема. На основе конфигурации базы данных мне нужно создать соответствующие компоненты, которые будут обрабатывать весь процесс. Я понял, что попробую сделать это следующим образом. Во-первых, создайте маркерный бин на основе db config.
@Configuration
class Dbconfig {
  @Autowired DbRepo dbRepo;
  @Autowired GenericApplicationContext applicationContext;
  @PostConstruct
  public void init(){
    Config config = dbRepo.findConfiguration();
    if(config.value.equals("test")){
      applicationContext.registerBean("testBean", TestBean.class, TestBean::new);
    }else{ //other steps
  }
}
Затем на основе этого маркерного бина я создам соответствующие, например:
@Configuration
@ConditionalOnBean(name = "testBean")
@AutoConfigureAfter(value = Dbconfig.class)
public class ObjConfig{
//creating proper @Beans
  }
Но, к сожалению, это не работает. Не знаю, почему spring не видит этот «testBean». Тем не менее, я отладил его и вижу, что этот bean-компонент существует в BeanFactory контекста приложения. Он также гладко работает с аннотацией @DependsOn, тогда Spring может видеть этот компонент. Я буду признателен за любую помощь или предложения, как решить проблему другим способом.
 
                                                                     
                                                                     
                                                                    
@ConditionalOnExpressionотлично работает с инъекцией bean-компонента, но, поскольку у меня много bean-компонентов, я попытался исправить это с помощью:@Configuration @ConditionalOnExpression ("#{testBean.active == true}") public class ObjConfig{ //config @Beans }, а затем я получаю:SpelEvaluationException: EL1008E: Property or field 'testBean' cannot be found.. Любая подсказка, почему? 03.01.2020