@ConditionalOnProperty 和 "defaultValue":真
@ConditionalOnProperty and "defaultValue": true
我有一个带有一些 AOP 逻辑的启动器。请查看我的自动配置:
@Configuration
@EnableAspectJAutoProxy
@ConditionalOnProperty("simple-security.enabled")
public class AopAutoConfiguration {
@Bean
internal fun securedControllerMethodAspect() = SecuredControllerMethodAspect()
}
如您所见,我正在使用 @ConditionalOnProperty("simple-security.enabled")
注释。
现在,看看我的 additional-spring-configuration-metadata.json
:
{
"properties": [
{
"name": "simple-security.enabled",
"type": "java.lang.Boolean",
"description": "Whether to enable simple security.",
"sourceType": "dev.d1s.security.properties.SimpleSecurityConfigurationProperties",
"defaultValue": true
}
]
}
所以,我的问题很简单:为什么 Spring 在计算条件时不考虑此 属性 的 defaultValue
值?
文件 additional-spring-configuration-metadata.json
不决定 spring 的行为方式,而是给用户提示如何使用您的自动配置。在这种情况下,提示与您实施的内容不准确。
如果您希望 Spring 在未设置 simple-security.enabled
和设置为 true
时表现相同,您可以使用 matchIfMissing
参数注释 @ConditionalOnProperty
.
以上可以改写为:
@ConditionalOnProperty("simple-security.enabled", matchIfMissing = true)
或者,simple-security.enabled 的默认值可以在 class dev.d1s.security.properties.SimpleSecurityConfigurationProperties
.
中设置
像这样:
/**
* @property enabled Whether to enable simple security. Enabled by default.
*/
@ConfigurationProperties(prefix = "simple-security")
data class SimpleSecurityConfigurationProperties(
var enabled: Boolean = true
)
P/s:我建议您让 Spring 生成元数据,而不是手动编写。可以参考这个文档:https://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html#appendix.configuration-metadata.annotation-processor
我有一个带有一些 AOP 逻辑的启动器。请查看我的自动配置:
@Configuration
@EnableAspectJAutoProxy
@ConditionalOnProperty("simple-security.enabled")
public class AopAutoConfiguration {
@Bean
internal fun securedControllerMethodAspect() = SecuredControllerMethodAspect()
}
如您所见,我正在使用 @ConditionalOnProperty("simple-security.enabled")
注释。
现在,看看我的 additional-spring-configuration-metadata.json
:
{
"properties": [
{
"name": "simple-security.enabled",
"type": "java.lang.Boolean",
"description": "Whether to enable simple security.",
"sourceType": "dev.d1s.security.properties.SimpleSecurityConfigurationProperties",
"defaultValue": true
}
]
}
所以,我的问题很简单:为什么 Spring 在计算条件时不考虑此 属性 的 defaultValue
值?
文件 additional-spring-configuration-metadata.json
不决定 spring 的行为方式,而是给用户提示如何使用您的自动配置。在这种情况下,提示与您实施的内容不准确。
如果您希望 Spring 在未设置 simple-security.enabled
和设置为 true
时表现相同,您可以使用 matchIfMissing
参数注释 @ConditionalOnProperty
.
以上可以改写为:
@ConditionalOnProperty("simple-security.enabled", matchIfMissing = true)
或者,simple-security.enabled 的默认值可以在 class dev.d1s.security.properties.SimpleSecurityConfigurationProperties
.
像这样:
/**
* @property enabled Whether to enable simple security. Enabled by default.
*/
@ConfigurationProperties(prefix = "simple-security")
data class SimpleSecurityConfigurationProperties(
var enabled: Boolean = true
)
P/s:我建议您让 Spring 生成元数据,而不是手动编写。可以参考这个文档:https://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html#appendix.configuration-metadata.annotation-processor