Как сделать инъекцию бина в Spring в зависимости от условия?
Как я могу сделать инъекцию бина в зависимости от условия? У меня есть @Autowired бин, который должен быть проинициализирован, когда выбраны Spring-профили A и B, и не должен инициалазироваться, когда выбран профиль C.
P.S.: Spring конфигурирую в xml.
Ответы (2 шт):
В Spring есть аннотация @Lazy, которая указывает, что данный бин должен быть проинициализирован "лениво", то есть инициализации не будет, пока не произойдёт первое обращение к бину.
Эта аннотация может быть добавлена как к классу конфигурации (в этом случае все бины будут загружаться лениво), так и к конфигу конкретного бина, компоненту или полю, отмеченному аннотацией @Autowired.
Я знаю несколько простых способов сделать то что вам требуется:
Если вы используете профили для разного конфигурирования приложения можно воспользоваться аннотацией
@Profile("!С"), если поставить данную аннотацию над бином он будет инициализирован только в том случае если профиль неC. (Профиль можно задать в настройкахIntellij idea). Ссылка на тему профилейСоздать свойство в файле ресурсов
application.yamlотносительно которого потом решать создавать бин или нет c помощью аннотации@ConditionalOnProperty(prefix = "anyprefix", name = "bin", havingValue = "true").
Ссылки на тему данной аннотации: вот и вот, также есть похожий вопрос