Можно ли использовать Spring Bean в условии?
Я хотел бы создать Условие, которое использует специальный Бин. Является ли это возможным?
т.е. как то так:
@Component
public class MyCondition implements Condition{
@Autowired
MyBean myBean;
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return myBean.isTrue();
}
}
Т.е. в некоторых случаях мне нужно получить сессионный компонент базы данных и что-то проверить в базе данных, прежде чем я смогу сказать, является ли условие истинным или ложным.
Мне нужно это условие для использования с @Conditional
аннотация тогда. Т.е.:
@Conditional(MyCondition.class)
@Configuration
public class Config{
//...
}
1 ответ
Решение
Нет, ты не можешь. Как сказано в документации, это потому, что это может
вызывать преждевременную реализацию компонента, нарушая контейнер и вызывая непреднамеренные побочные эффекты
так что в вашем случае, если ваше условие ссылается на bean-компонент DB, экземпляр DB может быть создан до того, как контейнер сможет выполнить свои предварительные условия.