Spring Boot系列四 Spring @Value 属性注入使用总结一
2017-05-16 22:29
1041 查看
@Value注入
不通过配置文件的注入属性的情况
通过@Value将外部的值动态注入到Bean中,使用的情况有:注入普通字符串
注入操作系统属性
注入表达式结果
注入其他Bean属性:注入beanInject对象的属性another
注入文件资源
注入URL资源
详细代码见:
@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对象的属性another
@Component public 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
测试类:
@SpringBootApplication public 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()); } }
运行测试类
normal=normal systemPropertiesName=Windows 10 randomNumber=35.10603794922444 fromAnotherBean=其他Bean的属性 resourceFile=test configuration file testUrl=<html>...<title>百度一下,你就知道</title>...略</html>
通过配置文件的注入属性的情况
通过@Value将外部配置文件的值动态注入到Bean中。配置文件主要有两类:application.properties。application.properties在spring boot启动时默认加载此文件
自定义属性文件。自定义属性文件通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二属性文件存在相同key,则最后一个属性文件里的key启作用。加载文件的路径也可以配置变量,如下文的${anotherfile.configinject},此值定义在第一个属性文件config.properties
第一个属性文件config.properties内容如下:
${anotherfile.configinject}作为第二个属性文件加载路径的变量值
book.name=bookName anotherfile.configinject=placeholder
第二个属性文件config_placeholder.properties内容如下:
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(); } }
测试代码:
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()); } }
测试运行结果:
bookName=bookName bookNamePlaceholder=bookNamePlaceholder appName=appName env=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
代码
Github代码相关文章推荐
- Spring Boot系列四 Spring @Value 属性注入使用总结一(转载)
- Spring Boot系列五 Spring @Value 属性注入使用总结二
- Spring Boot系列 Spring @Value 属性注入使用总结一
- Spring系列【09】使用<prop>标签为Java持久属性集注入值
- Redis系列三 - Spring boot如何使用redis做缓存及缓存注解的用法总结
- Redis系列三 - Spring boot如何使用redis做缓存及缓存注解的用法总结
- [Spring Boot实战系列] - No.4 Spring boot 中如何在Utils类中使用@Autowired注入bean
- Redis系列三 - Spring boot如何使用redis做缓存及缓存注解的用法总结
- (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
- 使用Spring注解来注入属性
- Spring Boot 属性配置和使用
- 从头认识Spring-2.6 在注解中使用表达式@Value(2)-使用表达式注入其他对象的值
- Spring boot将配置属性注入到bean类中
- 使用spring进行属性注入的实例解析(spring面向切面和控制反转)。
- JAVA_OA管理系统(四)番外篇:使用Spring注解注入属性
- 从头认识Spring-2.6 在注解中使用表达式@Value(1)-注入普通值
- Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
- spring 为某类注入的属性 其子类无法使用
- SpringBoot配置属性系列
- 使用Spring注解注入属性