一、Spring的@Value

Spring支持在XML配置文件和注解中使用Spring  EL(Spring 表达式语言),Spring EL类似于JSP的EL表达式语言。

在Spring开发中经常涉及调用各种资源的情况,包含普通文件、网址、配置文件、系统环境变量等,我们可以使用Spring的表达式语言实现资源的注入。

程序代码里,Spring主要在@Value注解的参数中使用EL表达式。

  • 注入普通字符串
  • 注入操作系统属性
  • 注入表达式运算结果
  • 注入其他Bean的属性
  • 注入文件内容
  • 注入网址内容
  • 注入属性文件(注意:用的是$符号)
import org.springframework.core.io.Resource;
import org.springframework.core.env.Environment;
import org.apache.commons.io.IOUtils; @Component
public class ELConfig {
@Value("注入普通字符串")// 注入普通字符串
private String normal; @Value("#{systemProperties['os.name']}")// 注入操作系统属性
private String osName; @Value("#{T(java.lang.Math).random() * 100.0 }")// 注入表达式结果
private double randomNumber; @Value("#{payOrderQueryController.payCenterFacade}")// 注入其他Bean属性
private IPayCenterFacade fromAnother; @Value("classpath:test.txt")// 注入文件资源
private Resource testFile; @Value("https://www.baidu.com")// 注入网址资源
private Resource testUrl; @Value("${book.name}")// 注入配置文件【注意是$符号】
private String bookName; @Autowired// Properties可以从Environment获得
private Environment environment; @Override
public String toString() {
try {
return "ELConfig [normal=" + normal
+ ", osName=" + osName //os.name,如Windows 8.1
+ ", randomNumber=" + randomNumber //值如97.53293482705482
+ ", fromAnother=" + fromAnother //别的bean的成员属性
+ ", testFile=" + IOUtils.toString(testFile.getInputStream()) //输出文件里的内容
+ ", testUrl=" + IOUtils.toString(testUrl.getInputStream()) //输出网页的html
+ ", bookName=" + bookName //配置的值
+ ", environment=" + environment.getProperty("book.name") + "]";
} catch (IOException e) {
e.printStackTrace();
return null;
}
} }

二、Spring Boot的@ConfigurationProperties

先看下面的@Value注解:

    @Value("${book.name}")
private String bookName;
@Value("${book.author}")
private String bookAuthor;

上面这种使用@Value注入每个配置在实际项目中会显得格外麻烦,因为我们的配置通常会是许多个,就要使用@Value注入很多次。

Spring Boot提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean关联,从而实现类型安全的配置。

@Component
@ConfigurationProperties(prefix = "book")
public class Book { private String name;
private String author;
private int age; //get.. set..
}

application.yml配置:

book:
name: 一个人的朝圣
author: 蕾秋·乔伊斯
age: 35

@ConfigurationProperties有两个属性

  • prefix:指定properties的配置的前缀
  • locations:指定properties文件的位置

Spring @Value注解 and Spring Boot @ConfigurationProperties注解的更多相关文章

  1. spring学习笔记(一)@ConfigurationProperties注解

    结论: 这个注解主要是为了将配置文件中的属性映射到实体类上,并且支持嵌套映射. 代码说明: @ConfigurationProperties(prefix = "person") ...

  2. spring 、spring boot 常用注解

    @Profile 1.用户配置文件注解. 2.使用范围: @Configration 和 @Component 注解的类及其方法, 其中包括继承了 @Component 的注解: @Service. ...

  3. 在Spring Boot中使用 @ConfigurationProperties 注解

    但 Spring Boot 提供了另一种方式 ,能够根据类型校验和管理application中的bean. 这里会介绍如何使用@ConfigurationProperties.继续使用mail做例子. ...

  4. 在Spring Boot中使用 @ConfigurationProperties 注解, @EnableConfigurationProperties

    但 Spring Boot 提供了另一种方式 ,能够根据类型校验和管理application中的bean. 这里会介绍如何使用@ConfigurationProperties.继续使用mail做例子. ...

  5. Spring Boot 之注解@Component @ConfigurationProperties(prefix = "sms") 使用@ConfigurationProperties读取yml配置

    从spring-boot开始,已经支持yml文件形式的配置,@ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象 @Componen ...

  6. Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性

    在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...

  7. Spring Boot中@ConfigurationProperties注解实现原理源码解析

    0. 开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis ...

  8. 精尽Spring Boot源码分析 - @ConfigurationProperties 注解的实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  9. Spring Boot中注解@ConfigurationProperties

    在Spring Boot中注解@ConfigurationProperties有三种使用场景,而通常情况下我们使用的最多的只是其中的一种场景.本篇文章带大家了解一下三种场景的使用情况. 场景一 使用@ ...

随机推荐

  1. cc2650 7x7封装更换为 5X5 4x4

    https://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/104028.aspx 解决方案 ...

  2. ubuntu汉化

    寻找 Simplified Chinese,点击下面的apply 回到这里在最下面找到刚刚安装的语言,是灰色的,左键点击,将它拖到最上面,点击应用到整个系统,配置完成.重启系统就变成中文了. 晚上不要 ...

  3. 20165311 预备作业3 Linux安装及学习

    Linux安装 由于回家没有带笔记本,所以把VirtualBox安装在家里的台式上,回学校之后再重新在自己的笔记本上安装虚拟机.参考<基于VirtualBox安装Ubuntu图文教程>,整 ...

  4. Django:视图views(三)

    写一下Cookie.重定向.Session Cookie 测试代码,承接前面的代码: 路由: booktest/urls.py urlpatterns = [ url('^$',views.index ...

  5. AudioUnit录音和播放同时进行的一些注意点

    录音(播放)和暂停 -(void)start { self.soundTotalLength = 0.0f; if (!self.unitHaveStart) { NSError *error = n ...

  6. git修改提交的用户名

    场景分析 试想一下这样的场景,你先在自己的电脑上上创建了一个项目,并且把他添加到了git仓库,然后提交到了Github.但是,下一次,你在公司的电脑上clone了这个项目,并且修改了文件,当你提交到G ...

  7. zabbix自动发现主机并加入组绑定模板

    在被监控主机多的情况下,怎样将这些主机加入zabbix server进行监控呢?下面将介绍下zabbix自动发现功能 1.创建自动发现规则 创建“规则名称,配置ip范围及检查方式”,点击“增加”,完成 ...

  8. 内存不够怎么办? 1.5.1 关于隔离 1.5.2 分段(Segmention) 1.5.3 分页(Paging)

    小结: 1. 内存不够怎么办?1.5.1 关于隔离1.5.2 分段(Segmention)1.5.3 分页(Paging) <程序员的自我修养——链接.装载与库>

  9. Flink – SlotSharingGroup

      SlotSharingGroup 表示不同的task可以共享slot,但是这是soft的约束,即也可以不在一个slot 默认情况下,整个StreamGraph都会用一个默认的"defau ...

  10. JRE vs OpenJDK vs Oracle JDK

    JRE vs OpenJDK vs Oracle JDK 在我们继续了解如何安装Java之前,让我们快速地了解JRE.OpenJDK和Oracle JDK之间的不同之处. JRE(Java Runti ...