spring之@Value詳解(轉載)

@Value注入

不經過配置文件的注入屬性的狀況

經過@Value將外部的值動態注入到Bean中,使用的狀況有:java

  • 注入普通字符串
  • 注入操做系統屬性
  • 注入表達式結果
  • 注入其餘Bean屬性:注入beanInject對象的屬性another
  • 注入文件資源
  • 注入URL資源spring

    詳細代碼見:app

   @Value("normal")
    private String normal; // 注入普通字符串

    @Value("#{systemProperties['os.name']}")
    private String systemPropertiesName; // 注入操做系統屬性

    @Value("#{ T(java.lang.Math).random() * 100.0 }")
    private double randomNumber; //注入表達式結果

    @Value("#{beanInject.another}")
    private String fromAnotherBean; // 注入其餘Bean屬性:注入beanInject對象的屬性another,類具體定義見下面

    @Value("classpath:com/hry/spring/configinject/config.txt")
    private Resource resourceFile; // 注入文件資源

    @Value("http://www.baidu.com")
    private Resource testUrl; // 注入URL資源

注入其餘Bean屬性:注入beanInject對象的屬性anotherdom

@Component
public class BeanInject {
    @Value("其餘Bean的屬性")
    private String another;

    public String getAnother() {
        return another;
    }

    public void setAnother(String another) {
        this.another = another;
    }
}

經過配置文件的注入屬性的狀況

經過@Value將外部配置文件的值動態注入到Bean中。配置文件主要有兩類:ui

  • application.properties。application.properties在spring boot啓動時默認加載此文件
  • 自定義屬性文件。自定義屬性文件經過@PropertySource加載。@PropertySource能夠同時加載多個文件,也能夠加載單個文件。若是相同第一個屬性文件和第二屬性文件存在相同key,則最後一個屬性文件裏的key啓做用。加載文件的路徑也能夠配置變量,以下文的${anotherfile.configinject},此值定義在第一個屬性文件config.properties

第一個屬性文件config.properties內容以下: 
${anotherfile.configinject}做爲第二個屬性文件加載路徑的變量值this

book.name=bookName
anotherfile.configinject=placeholder

第二個屬性文件config_placeholder.properties內容以下:spa

book.name.placeholder=bookNamePlaceholder

下面經過@Value(「${app.name}」)語法將屬性文件的值注入bean屬性值,詳細代碼見:操作系統

@Component
// 引入外部配置文件組:${app.configinject}的值來自config.properties。
// 若是相同
@PropertySource({"classpath:com/hry/spring/configinject/config.properties",
    "classpath:com/hry/spring/configinject/config_${anotherfile.configinject}.properties"})
public class ConfigurationFileInject{
    @Value("${app.name}")
    private String appName; // 這裏的值來自application.properties,spring boot啓動時默認加載此文件

    @Value("${book.name}")
    private String bookName; // 注入第一個配置外部文件屬性

    @Value("${book.name.placeholder}")
    private String bookNamePlaceholder; // 注入第二個配置外部文件屬性

    @Autowired
    private Environment env;  // 注入環境變量對象,存儲注入的屬性值

    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append("bookName=").append(bookName).append("\r\n")
        .append("bookNamePlaceholder=").append(bookNamePlaceholder).append("\r\n")
        .append("appName=").append(appName).append("\r\n")
        .append("env=").append(env).append("\r\n")
        // 從eniroment中獲取屬性值
        .append("env=").append(env.getProperty("book.name.placeholder")).append("\r\n");
        return sb.toString();
    }   
}

來源:https://blog.csdn.net/hry2015/article/details/72353994.net

相關文章
相關標籤/搜索