请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

欣东微医疗技术论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 45|回复: 0

Spring Boot系列四 Spring @Value 属性注入使用

[复制链接]

670

主题

806

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
38570
QQ
发表于 2018-9-3 16:11:28 | 显示全部楼层 |阅读模式
@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

@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());    }}

运行测试类

normal=normalsystemPropertiesName=Windows 10randomNumber=35.10603794922444fromAnotherBean=其他Bean的属性resourceFile=test configuration filetestUrl=<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=bookNameanotherfile.configinject=placeholder
  • 1
  • 2

第二个属性文件config_placeholder.properties内容如下:

book.name.placeholder=bookNamePlaceholder
  • 1

下面通过@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=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
代码

Github代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|eastwill.org  

GMT+8, 2018-9-22 21:03 , Processed in 0.092080 second(s), 26 queries .

Powered by Eastwill! X3.2

© 2001-2013 Eastwill Inc.

快速回复 返回顶部 返回列表