您的位置:首页 > 编程语言 > Java开发

Spring 运行时注入外部值

2020-02-17 05:11 309 查看

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拥有很多特性

  1.  使用bean的ID来应用bean;
  2. 调用方法和访问对象的属性;
  3. 对值进行算术、关系、逻辑运算;
  4. 正则表达式匹配;
  5. 集合操作;

#{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的一部分简单用法。后续我可能还会出续集,大家有兴趣可以再来看。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
一蓑烟雨任平生! 发布了4 篇原创文章 · 获赞 0 · 访问量 127 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: