Можно ли использовать 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 может быть создан до того, как контейнер сможет выполнить свои предварительные условия.

Другие вопросы по тегам