Springboot中@Value注解的場景用法及可能遇到的問題詳解
前言
@Value注解可以通過#{}和${}等2中方式使用,其作用通常如下:
@Value(“#{}”) 表示SpEl表達式通常用來獲取bean的屬性,或者調用bean的某個方法。當然還有可以直接表示常量。
用@Value(“${}”)注解一般從配置文件讀取屬性。
1 非配置文件注入
1.1 用法
通過@Value將外部的值動態(tài)注入到Bean中,常見用法如下:
- 注入普通字符串
- 注入操作系統(tǒng)屬性
- 注入表達式結果
- 注入其他Bean屬性
- 注入beanInject對象的屬性another
- 注入文件資源
- 注入URL資源
非配置文件注入在實際開發(fā)場景中使用的較少,@value大部分情況注入配置文件中的屬性
1.2 示例
注入普通字符串
直接附在屬性名上,在 Bean 初始化時,會賦初始值。
@Value("admin") private String name;
注入系統(tǒng)屬性
@Value("#{systemProperties['os.name']}") private String osName;
注入其他bean的屬性
注入User對象中的屬性userName
@Value("#{User.userName}") private String userName;
注入文件資源
@Value("classpath:com/ndtest/spring/configinject/config.txt") private Resource resourceFile;
注入URL資源
@Value("http://www.baidu.com") private Resource testUrl;
2 配置文件注入(重點)
SpringBoot 通過 @Value 注解將配置文件中的屬性注入到容器內組件中(可用在 @Controller 、@Service 、@Configuration、@Component 等Spring托管的類中)
1.注入普通字符串
在 application.properties
配置文件中有如下配置:
userName=zhaoyp
我們可以使用@Value注解注入屬性:
@Value("${userName}") public String userName;
2.注入基本類型(最常使用)
這次我們使用yml文件作為配置文件,假設application.yml文件中定義了服務器的基本配置
client: ipAddr: 222.95.84.124 sshPort: 22 sshUser: root sshPass: Test!@#123
我們可以通過@Value注解注入屬性
@Value("${client.ipAddr}") private String ipAddr; @Value("${client.sshPort}") private Integer sshPort; @Value("${client.sshUser}") private String sshUser; @Value("${client.sshPass}") private String sshPass;
3.注入數組、List類型
假設配置文件如下:
ids=1,2,3
// 注入數組類型 @Value("${ids}") public int[] arrIds; // 注入List @Value("#{'${ids}'.split(',')}") public List<String> listIds;
3 @Value注解獲取不到值的常見問題
1 使用static或者final修飾了tagValue
錯誤示范如下:
@Value("${ftpIP}") private static String ftpIP; @Value("${ftpUserName}") private final String ftpUserName;
解決辦法是移除static或final關鍵字。
2 使用該注解的類上面沒有加注解
沒有加注解即不能被spring管理(類沒有加上@Component(或者@service等))
錯誤示范如下:
public class FTPManagerService { @Value("${ftpIP}") private static String ftpIP; }
正確案例:
@Component // 檢查注解是否遺漏 public class FTPManagerService { @Value("${ftpIP}") private static String ftpIP; }
3 使用new關鍵字新建了實例,而沒有使用@Autowired
錯誤用法以及正確案例如下
public class FTPManagerService { @Value("${ftpIP}") private static String ftpIP; } public class Test{ /*錯誤用法*/ FTPManagerService f = new FTPManagerService (); /*正確用法*/ @Autowired FTPManagerService f2; }
以上便是@Value注解的使用方法以及踩坑案例,希望能幫到大家~
總結
到此這篇關于Springboot中@Value注解的場景用法及可能遇到的問題的文章就介紹到這了,更多相關Springboot @Value注解場景用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
啟動Tomcat報錯Unsupported major.minor version xxx的解決方法
這篇文章主要為大家詳細介紹了啟動Tomcat報錯Unsupported major.minor version xxx的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11