我有一些 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
}
]
}
defaultValue所以,我的問題很簡單:為什么 Spring在計算條件時不考慮這個屬性的值?
uj5u.com熱心網友回復:
該檔案additional-spring-configuration-metadata.json不決定 spring 的行為方式,而是向用戶提示如何使用您的自動配置。在這種情況下,提示與您實施的內容不準確。
如果您希望 Spring 在simple-security.enabled未設定和設定為時的行為方式相同,則true可以在注釋中使用matchIfMissingparam @ConditionalOnProperty。
上式可以改寫如下:
@ConditionalOnProperty("simple-security.enabled", matchIfMissing = true)
或者,可以在類中設定 simple-security.enabled 的默認值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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/449449.html
