Spring 运行时注入外部值
Spring 运行时注入外部值
外部值,指的是针对Spring容器而言。前面几篇我们讲的是针对Spring容器Bean的各种方式的装配。而本篇,将讲述一下Spring如何在运行时注入外部值。
属性占位符
Spring表达式语言(SpEL)
属性占位符
使用@PropertySource 注解和Environment
@Configuration
@PropertySource (classpath:"com/web/app.properties")
public class ExpConfig(){
@Autowired
Environment env;
在这个地方可以使用 env对象获取app.properties的任何内容
Environment有4个重载方方法
getProperty(String key);
getProperty(String key,String defaultValue);
getProperty(String key,Class<T> type);
getProperty(String key,Class<T> type,T defaultValue );
此外还有很多方法如 getRequiredProperty() 必须有值
getPropertyAsClass();将属性解析为类
还可以检查那些profile处于激活状态
getActiveProfiles(); 返回String[]
}
@Value("${node.key}")
String value ;
相信这个大家都用到到过了,但是如果要是使用@Value必须配置一个bean PropertySourcesPlaceholderConfigurer 它可以基于Environment及其属性来源解析占位符。
xml 配置
在声明命名空间到时候加上<context:property-placeholder/> 该元素将会为你自动创建PropertySourcesPlaceholderConfigurer bean
Spring表达式语言(SpEL)
SpEL(Spring Expression Language)是很强大的,具有超乎你想象的装配效果。SpEL表达式要放在"#{...}"中间,SpEL拥有很多特性
- 使用bean的ID来应用bean;
- 调用方法和访问对象的属性;
- 对值进行算术、关系、逻辑运算;
- 正则表达式匹配;
- 集合操作;
#{T(System).currentTimeMillis()} T() 表达式会System视作java lang包下的System对象,并调用它的方法,表示当前时间毫秒值。
#{BeanID.属性} 可以通过Bean的ID值引用属性。还可以引用系统对象获取系统属性值#{systemProperties['node.key']}
@Value("#{systemProperties['node.key']}")
String Value;
这样就得到key所对应的value值了。
同时他还可以指定各种类型的值
#{3.141592653} 浮点 #{10.04E}科学计数法 #{"minmin"} String #{false} boolean值
应用bean、属性和方法
#{bean的ID值.getName()} 可以通过ID获取bean对象,然后调用方法,最后返回值。
#{bean的ID值.getName().toUpperCase()} 如果返回的name是String 还可以将其转化为大写。
#{bean的ID值.getName()?.toUpperCase()} 还可以判空,如果不为null转化大写,如果为null 则原样返回。这不三元运算符嘛?
T(java.lang.Math).random() T() 的运算结果是一个Class 可以通过这个类调用静态方法和常量。
SpEL有较多的运算符,这里就不细细说了,想了解的去官方文档看看。
计算正则表达式
#{ "需要匹配的值" matches "正则匹配表达式" } 结果boolean值,匹配返回true 不匹配返回false;
计算集合
#{bean的ID值.getLIst[1].name} 返回角标为1的元素的name属性值。当然你也可以同前面的表达式组合,从而达到自己想要的结果。
这只是 SpEL的一部分简单用法。后续我可能还会出续集,大家有兴趣可以再来看。
- 点赞
- 收藏
- 分享
- 文章举报
- java使用NIO拷贝大文件
- 由于想自己实现一个简单的springboot包扫描器,所以有了这篇文章
- Java程序员必备知识-多线程框架Executor详解
- Spring Data Jpa普通分页+排序分页
- SpringBoot2.x-myBatis简单使用
- Maven Profile 与 Spring Profile 管理多环境打包
- Spring面试总结
- Java核心技术卷一读书笔记 第四章:对象与类
- 理解Spring中的IOC
- Java运行时数据区域
- Java代码如何运行?
- 在java中使用Mysq数据库遇到的一些问题
- Java使用gmgraphicemagic 进行图片变换大小
- Java根据文件名下载FTP服务器上文件
- java pdf转图片
- 通过idea gradle本地搭建spring5阅读环境
- eureka启动报java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder的错
- IDEA+java通过SSH来进行分析日志,实现UI自动化动态验证码登录
- build目录调整 eclipse maven项目
- 从追MM谈Java的23种设计模式