Spring @Value注解 and Spring Boot @ConfigurationProperties注解
一、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注解的更多相关文章
- spring学习笔记(一)@ConfigurationProperties注解
结论: 这个注解主要是为了将配置文件中的属性映射到实体类上,并且支持嵌套映射. 代码说明: @ConfigurationProperties(prefix = "person") ...
- spring 、spring boot 常用注解
@Profile 1.用户配置文件注解. 2.使用范围: @Configration 和 @Component 注解的类及其方法, 其中包括继承了 @Component 的注解: @Service. ...
- 在Spring Boot中使用 @ConfigurationProperties 注解
但 Spring Boot 提供了另一种方式 ,能够根据类型校验和管理application中的bean. 这里会介绍如何使用@ConfigurationProperties.继续使用mail做例子. ...
- 在Spring Boot中使用 @ConfigurationProperties 注解, @EnableConfigurationProperties
但 Spring Boot 提供了另一种方式 ,能够根据类型校验和管理application中的bean. 这里会介绍如何使用@ConfigurationProperties.继续使用mail做例子. ...
- Spring Boot 之注解@Component @ConfigurationProperties(prefix = ";sms";) 使用@ConfigurationProperties读取yml配置
从spring-boot开始,已经支持yml文件形式的配置,@ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象 @Componen ...
- Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性
在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...
- Spring Boot中@ConfigurationProperties注解实现原理源码解析
0. 开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis ...
- Spring Boot使用@ConfigurationProperties注解获取配置文件中的属性值
注意:这种方式要提供属性的getter/setter方法—— 如果idea报错,提示没有相应的执行器,就需要在maven中添加: (虽然不配置代码也能正常运行,作用在下面会说明) 配置了该执行器后,在 ...
- Spring Boot常用注解总结
Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...
随机推荐
- Hibernate控制insert\update语句
- tomcat集群时统计session与在线人数
tomcat集群时,原来通过HttpSessionListener实现类监听session的创建和销毁来统计在线人数的方法不再有效,因为不是每个人登陆都会在同一个tomcat服务器上,而在另一台tom ...
- ArrayList源码解析
ArrayList简介 ArrayList定义 1 public class ArrayList<E> extends AbstractList<E> implements L ...
- Json 的日期格式转换成DateTime
JSON 的日期形式:”/Date(1242357713797+0800)/” , 下面我们就用以下C#的方法将他转换成DateTime类型: /// <summary> /// Json ...
- enum类型被intent所携带时需要注意的地方
一般我们在Activity之间传递对象时多用Parcelable.比如写一个class,在这个class上标明implements Parcelable并实现接口就可以用Intent.putExtra ...
- RBF network
1.radial basis function RBF表示某种距离,$\mu_m$为中心点,相当于将点$x$到中心点的某种距离作为特征转换 Output方法可以根据需求任意选取(比如使用SVM,log ...
- C#调用C++动态库时类型转换
因为本人主要从事c#开发,但是在工作中经常需要用到c++编写的DLL,因此需要知道c++中的类型与c#中的类型是如何转换的.搜集整理如下. //C++中的DLL函数原型为 //extern &qu ...
- js 拼接table 的方法
<html> <head> <title>test page</title> <script type='text/javascript'> ...
- Cookie与 Session使用详解
Cookie概念 在浏览某些 网站 时,这些网站会把 一些数据存在 客户端 , 用于使用网站 等跟踪用户,实现用户自定义 功能. 是否设置过期时间: 如果不设置 过期时间,则表示这个 Cookie生命 ...
- SQL Server导入导出不丢主键和视图的方法
SQL Server导入导出 SQL Server 导入导出 工具/原料 使用Microsoft SQL Server Management Studio 导入导出数据. 直接使用Microsoft ...