通過@Value將外部的值動(dòng)態(tài)注入到Bean中,使用的情況有:
注入U(xiǎn)RL資源
詳細(xì)代碼見:
@Value("normal") private String normal; // 注入普通字符串 @Value("#{systemProperties['os.name']}") private String systemPropertiesName; // 注入操作系統(tǒng)屬性 @Value("#{ T(java.lang.Math).random() * 100.0 }") private double randomNumber; //注入表達(dá)式結(jié)果 @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; // 注入U(xiǎn)RL資源
注入其他Bean屬性:注入beanInject對象的屬性another
@Componentpublic class BeanInject { @Value("其他Bean的屬性") private String another; public String getAnother() { return another; } public void setAnother(String another) { this.another = another; }}
注入文件資源:com/hry/spring/configinject/config.txt
test configuration file
測試類:
@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}@RunWith(SpringRunner.class)@SpringBootTest(classes=Application.class)public class ConfiginjectApplicationTest { @Autowired private BaseValueInject baseValueInject; @Test public void baseValueInject(){ System.out.println(baseValueInject.toString()); }}
運(yùn)行測試類
normal=normalsystemPropertiesName=Windows 10randomNumber=35.10603794922444fromAnotherBean=其他Bean的屬性resourceFile=test configuration filetestUrl=<html>...<title>百度一下,你就知道</title>...略</html>
通過@Value將外部配置文件的值動(dòng)態(tài)注入到Bean中。配置文件主要有兩類:
第一個(gè)屬性文件config.properties內(nèi)容如下:
${anotherfile.configinject}作為第二個(gè)屬性文件加載路徑的變量值
book.name=bookNameanotherfile.configinject=placeholder
第二個(gè)屬性文件config_placeholder.properties內(nèi)容如下:
book.name.placeholder=bookNamePlaceholder
下面通過@Value(“${app.name}”)語法將屬性文件的值注入bean屬性值,詳細(xì)代碼見:
@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啟動(dòng)時(shí)默認(rèn)加載此文件 @Value("${book.name}") private String bookName; // 注入第一個(gè)配置外部文件屬性 @Value("${book.name.placeholder}") private String bookNamePlaceholder; // 注入第二個(gè)配置外部文件屬性 @Autowired private Environment env; // 注入環(huán)境變量對象,存儲(chǔ)注入的屬性值 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(); } }
測試代碼:
Application.Java同上文
@RunWith(SpringRunner.class)@SpringBootTest(classes=Application.class)public class ConfiginjectApplicationTest { @Autowired private ConfigurationFileInject configurationFileInject; @Test public void configurationFileInject(){ System.out.println(configurationFileInject.toString()); }}
測試運(yùn)行結(jié)果:
bookName=bookNamebookNamePlaceholder=bookNamePlaceholderappName=appNameenv=StandardEnvironment {activeProfiles=[], defaultProfiles=[default], propertySources=[Inlined Test Properties,systemProperties,systemEnvironment,random,applicationConfig: [classpath:/application.properties],class path resource [com/hry/spring/configinject/config_placeholder.properties],class path resource [com/hry/spring/configinject/config.properties]]}env=bookNamePlaceholder
聯(lián)系客服