Итак, у меня есть стандартное веб-приложение Spring Boot. И у меня есть требование разрешить несколько механизмов аутентификации. Поэтому я хочу иметь файлы jar, которые обрабатывают различную аутентификацию. Один для сервера SAML, CAS, OAuth и т. д.
Я хочу, чтобы в моем «базовом» военном файле использовался стандартный jdbc (что он и делает сейчас), но я хочу иметь возможность поместить свой, скажем, CAS-security.jar в путь к классам и использовать Spring его AuthenticationProvider. Прямо сейчас у меня это в моем классе Application.java
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.authenticationProvider(authenticationProvider)
.userDetailsService(userDetailsService);
}
И я @Autowire провайдер и сервис, которые определены как @Bean как обычно ...
Но я хочу аннотировать (я думаю) эти определения @Bean, чтобы сказать: «Не используйте это, если есть еще один результат».
Мне нужна полная противоположность ConditionalOnMissingBean. Теперь я полагаю, что мог бы использовать эту аннотацию и перечислить все возможные классы подключаемых модулей, которые я мог бы использовать, но это плохая форма, поскольку я не хочу перекомпилировать / повторно развертывать каждый раз, когда я создаю новый подключаемый модуль безопасности.
Есть ли аннотация типа UseThisIfNoOtherBeanExists?
На самом деле, чего я действительно хочу, так это чтобы у меня были ВСЕ мои средства безопасности, скажем, SecurityConfiguration, аннотированные с помощью @Configuration, и чтобы весь класс был заменен чем-то еще, если это возможно.
«Мне нужна полная противоположность ConditionalOnMissingBean». ... "Есть ли аннотация типа UseThisIfNoOtherBeanExists?" Да, это @ConditionalOnMissingBean, т.е. «загружать только в том случае, если еще нет другого bean-компонента этого типа».




Похоже, вы ищете ConditionalOnMissingBean. Аннотированный этим bean-компонент будет использоваться только в том случае, если bean-компонент этого типа еще не зарегистрирован в фабрике bean-компонентов.
Если вас это почему-то не устраивает, у вас есть варианты. Вы можете просмотреть весь пакет org.springframework.boot.autoconfigure.condition, чтобы увидеть, есть ли там что-то, что лучше всего подходит для вашего варианта использования. В качестве альтернативы вы также можете использовать @Conditional и вручную создать условие на основе среды, в которой работает ваше приложение.
Я бы рекомендовал использовать пружинные предложения механизма отмены бобов.