本文次要介绍Spring @Value 注解注入属性值的应用办法的剖析,文章通过示例代码十分具体地介绍,对于每个人的学习或工作都有肯定的参考学习价值
在应用spring框架的我的项目中,@Value是常常应用的注解之一。其性能是将与配置文件中的键对应的值调配给其带注解的属性。在日常应用中,咱们罕用的性能绝对简略。本文使您系统地理解@Value的用法。
@Value注入模式
依据注入的内容起源,@ Value属性注入性能能够分为两种:通过配置文件进行属性注入和通过非配置文件进行属性注入。
非配置文件注入的类型如下:
- 注入一般字符串
- 注入操作系统属性
- 注射表白后果
- 注入其余bean属性
- 注入文件资源
- 注入URL资源
基于配置文件的注入
首先,让咱们看一下配置文件中的数据注入,无论它是默认加载的application.properties还是自定义my.properties文档(须要@PropertySource额定加载)。例如:application.properties属性值以以下模式定义:
user.name=admin
my.properties配置文件中定义的属性如下:
user.password=pwd123
而后,在bean中应用@Value,如下所示:
@PropertySource("classpath:my.properties")@RestControllerpublic class ValueController { /** *Get in application.properties Properties configured in */ @Value("${user.name}") private String name; /** *Get in my.properties Configuration properties in */ @Value("${user.password}") private String password;}
区别在于,在spring boot我的项目中,如果应用my.properties文件,则须要通过类中的@ PropertySource导入配置文件,而application.properties中的属性将主动加载。
同时,您不仅能够通过@Value注入单个属性,还能够采纳数组和列表的模式。例如,配置如下:
tools=car,train,airplane
能够通过以下形式注入它:
/** *Injection array (automatically split according to ",") */@Value("${tools}")private String[] toolArray;/** *Injection list form (automatic segmentation based on "," and) */@Value("${tools}")private List<String> toolList;
默认状况下,spring将以“,”宰割,并将其转换为相应的数组或列表。
基于非配置文件的注入
在应用示例阐明基于非配置文件注入属性的实例之前,让咱们看一下SpEl。
Spring Expression Language是Spring表达式语言,能够在运行时查问和操作数据。应用#{…}作为操作符号,大括号中的所有字符均视为SpEl。
让咱们看一下特定实例场景的利用:
/** *实例化一个字符串,并赋予默认值 */@Valueprivate String wechatSubscription;/** *读取零碎的环境变量 */@Value("#{systemProperties['os.name']}")private String systemPropertiesName;/** *注入表达式计算结果 */@Value("#{ T(java.lang.Math).random() * 100.0 }")private double randomNumber;/** *读取一个bean:config的tool属性并注入 */@Value("#{config.tool}")private String tool;/** *将words用“|”分隔为字符串数组 */@Value("#{'${words}'.split('\|')}")private List<String> numList;/** *注入一个文件资源 */@Value("classpath:config.xml")private Resource resourceFile;/** *注入 URL 资源 */@Value("http://www.choupangxia.com")private URL homePage;
下面的示例显示了以下计划的应用:
- 间接注入字符串等效于实例化时间接初始化字符串。初始化空串
- 通过#{}注入零碎变量。
- 表达式计算结果通过#{}注入。
- 通过#{}注入其余bean的属性。
- 通过{}和$ {}的组合注入属性,而后拆分。
- 注入文件资源,并将相应的字符串值转换为相应的资源文件。
- 注入URL资源并将相应的URL字符串转换为URL。
默认值注入
无论应用#{}(SpEL)还是$ {}进行属性注入,当无奈取得相应的值时,都须要设置默认值,能够通过以下形式进行设置。
/** *If IP is not configured in the property, the default value is used */@Value("${ip:127.0.0.1}")private String ip;/** *If the value of port is not obtained in the system properties, 8888 is used. */@Value("#{systemProperties['port']?:'8888'}")private String port;
$ {}中间接应用“:”来设置未定义或空值的默认值,而#{}则须要应用“?:”来设置未设置属性的默认值。
欢送关注我的博客,外面有很多精品合集
- 本文转载注明出处(必须带连贯,不能只转文字):字母哥博客。
感觉对您有帮忙的话,帮我点赞、分享!您的反对是我不竭的创作能源! 。另外,笔者最近一段时间输入了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端拆散RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》