springboot-條件化注解


  在項目中,有時會遇到我們的Configuration、Bean、Service等等的bean組件需要依條件按需加載的情況。那么Spring Boot怎么做的呢?它為此定義了許多有趣的條件,當我們將它們運用到我們的bean上時,就可以實現動態的加載控制了。

  自動配置中使用的條件化注解

  舉個栗子:公司同事做了一個公用的sso服務,業務系統可以選擇性進行集成。當配置文件設置sso.enabled = true時,啟動單點登錄。當設置sso.enabled = false時,使用spring-security。

  • 配置文件

       

  • spring-security配置類的條件化加載
復制代碼
/**
 * Security登錄認證配置
 * @author hua.huang
 */
//@EnableWebSecurity  // 啟動SpringSecurity
@ConditionalOnProperty(value = "sso.enable",matchIfMissing = true,havingValue = "false")
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter{
復制代碼

 

 

ConditionalOnProperty的屬性說明
https://blog.csdn.net/shixin_li/article/details/80532866
復制代碼
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
    //數組,獲取對應property名稱的值,與name不可同時使用。 作用:value單獨使用時:當對應property名稱的值為false時,該configuration不生效;當對應property名稱的值為除false之外的值時,該configuration生效
    String[] value() default {};
 
    //字符串,property名稱的前綴,可有可無,可以與name組合使用
    String prefix() default "";
 
    //數組,property完整名稱或部分名稱(可與prefix組合使用,組成完整的property名稱),與value不可同時使用。 作用與value一樣
    String[] name() default {};
 
    //可與name、value(name和value不能同時存在)組合使用,比較獲取到對應property名稱的值與havingValue給定的值是否相同:如果相同,該configuration生效,反之,不生效 
    String havingValue() default "";
 
        //缺少該property時是否可以加載。如果為true,沒有該property也會正常加載;反之報錯
    boolean matchIfMissing() default false;
 
    //不需要管它
    boolean relaxedNames() default true;
 
}
復制代碼

 轉自:https://www.cnblogs.com/MrSi/p/9529918.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM