与ConditionalOnMissingBean相反

时间:2018-03-12 14:36:46

标签: java spring spring-boot

所以我有一个标准的Spring Boot Web应用程序。我需要允许多种身份验证机制。所以我希望能够拥有处理不同身份验证的jar文件。一个用于SAML服务器,CAS,OAuth等......

我希望我的“基础”war文件使用标准的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注释,并且如果可用的话,将整个类替换为其他内容。

1 个答案:

答案 0 :(得分:5)

听起来像是在寻找ConditionalOnMissingBean。只有当bean类型的bean尚未在bean工厂中注册时,才会使用带有此注释的bean。

如果您对此不满意,您可以选择。您可以仔细阅读the entire org.springframework.boot.autoconfigure.condition package以查看是否有最符合您用例的内容。或者,您也可以利用@Conditional,并根据运行应用程序的环境手工制作条件。