У меня есть такая проблема. На основе конфигурации базы данных мне нужно создать соответствующие компоненты, которые будут обрабатывать весь процесс. Я понял, что попробую сделать это следующим образом. Во-первых, создайте маркерный бин на основе 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