@Value注入static屬性


一般@Value是使用在非靜態方法上的

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Test {
    @Value("${url}")
    public String url = "/dev/xx";
}

 

對於靜態方法,以下做法是無效的

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Test {
    @Value("${url}")
    public static String url = "/dev/xx";
}

 

需要使用如下方法

方法一:xml通過bean注入

 

方法二:使用set方法注入

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Test {
    public static String url = "/dev/xx";

    @Value("${url}")
    public static void setUrl(String url) {
        Test.url = url;
    }
}

 

方法三:通過中間變量賦值

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Test {
    public static String url = "/dev/xx";

    @Value("${url}")
    public String tempUrl = "/dev/xx";

    @PostConstruct
    public void init() {
        url = tempUrl;
    }
}

 

1.@PostConstruct說明

     被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,並且只會被服務器調用一次,類似於Serclet的inti()方法。被@PostConstruct修飾的方法會在構造函數之后,init()方法之前運行。

2.@PreConstruct說明

     被@PreConstruct修飾的方法會在服務器卸載Servlet的時候運行,並且只會被服務器調用一次,類似於Servlet的destroy()方法。被@PreConstruct修飾的方法會在destroy()方法之后運行,在Servlet被徹底卸載之前。(詳見下面的程序實踐)

 


免責聲明!

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



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