【问题标题】:What is purpose of @ConditionalOnProperty annotation?@ConditionalOnProperty 注释的目的是什么?
【发布时间】:2014-12-11 06:02:56
【问题描述】:

刚刚修改了spring boot的配置,遇到了

@ConditionalOnProperty(prefix = "spring.social.", value = "auto-connection-views") 

来自org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration

@Bean(name = { "connect/twitterConnect", "connect/twitterConnected" })
@ConditionalOnProperty(prefix = "spring.social.", value = "auto-connection-views")
public View twitterConnectView() {
    return new GenericConnectionStatusView("twitter", "Twitter");
}

我不明白这个注释的目的。我猜这可能只有在属性值存在时才能使用 bean(例如“spring.social”、“auto-connection-views”)。

【问题讨论】:

    标签: spring annotations spring-boot


    【解决方案1】:

    注解用于根据属性的配置有条件地创建 Spring bean。在您在问题中显示的用法中,只有spring.social.auto-connection-views 属性存在并且它的值不是false 时才会创建bean。这意味着,要创建这个 View bean,您需要设置 spring.social.auto-connection-views 属性,并且它必须具有非 false 的值。

    您可以在整个 Spring Boot 代码库中找到此注解的许多其他用途。另一个例子是:

    @ConditionalOnProperty(prefix = "spring.rabbitmq", name = "dynamic", matchIfMissing = true)
    public AmqpAdmin amqpAdmin(CachingConnectionFactory connectionFactory) {
        return new RabbitAdmin(connectionFactory);
    }
    

    注意matchIfMissing 的使用。在这种情况下,如果spring.rabbitmq.dynamic 属性存在并且具有除false 以外的值该属性根本不存在,则将创建AmqpAdmin bean。这使得 bean 的创建选择退出,而不是问题中选择加入的示例。

    【讨论】:

      【解决方案2】:

      如果您在 TYPE 级别使用此属性,即在您的 @Configuration 类之一上...请记住,在这种情况下,注释会根据默认属性文件进行评估/检查,即 application.properties

      @ConditionalOnProperty on TYPE level w/ @Configuration

      【讨论】:

        【解决方案3】:

        恰恰相反。实现该方法的前提条件是,如果该属性在环境中设置(开发、批准、生产)并且是该方法的真值,则可以执行该属性。

        如果没有在环境注解中设置属性,则不会阻止方法的执行。

        【讨论】:

        • 我认为您以一种令人困惑的方式表达了这一点。我猜英语不是你的自然语言(Pt?)。我使用谷歌翻译,并通过翻译反馈第一个结果。如果是垃圾,我会简化原件并重试,直到再次出现OK。您能否提供一个用于运行您提到的不同环境的示例?
        • 你是对的。我是巴西人,不擅长写作。
        • 如果您不了解它,您可能会对它感兴趣。 pt.stackoverflow.com。那里只有几个大型机问题,但您也有其他经验。我的葡萄牙语很烂,所以我使用谷歌翻译并从那里的好人那里得到了很多帮助。
        • 有了这个问题,如果你能提供一个简短的代码示例来说明你的意思,我可以编辑文本。
        猜你喜欢
        • 2020-11-05
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 1970-01-01
        相关资源
        最近更新 更多