@Value在static變量上的使用

    網上有很多誤導人的博文,在此親測記錄下。

    下面介紹兩種方法,要注意這兩種方法必須在類上加@Component註解這樣Spring容器在加載時纔會初始化相應註解下的方法。

  1、 set注入法:

private static boolean debug;


//:false的意思是當gateway.request.log.debug不存在時默認爲false,否則不存在會報錯
 @Value("${gateway.request.log.debug:false}")
 public void setDebug(boolean debug) {
    類名.debug = debug;
 }

  Spring容器會在啓動時執行@Value註解下的setDebug()方法。網上有人說必須是static 的set方法,坑人不淺,下面這種寫法肯定是不行的(靜態方法不會被容器加載時加載,只能在調用時設值)

private static boolean debug;

//static方法不行
@Value("${gateway.request.log.debug:false}")
public static void setDebug(boolean debug) {
   類名.debug = debug;
}

  2、@PostConstruct註解法:

    

private static boolean debug;

 //臨時變量
 @Value("${gateway.request.log.debug:true}")
 private boolean debug_temp;

@PostConstruct
public void init() {
    //把臨時變量獲取到的值設置到static變量中
    類名.debug = debug_temp;
}

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章