通过Spring获取properties文件属性值
来源:互联网 发布:中央电视台网络客户端 编辑:程序博客网 时间:2024/05/22 11:14
Spring提供了注解@Value,用于在程序中获取properties配置文件属性值。例如:
1. applicationContext.xml中指定配置文件。
<context:property-placeholder location="classpath:xxx.properties" ignore-unresolvable="true" />
当有多个配置文件时,上述配置可以配置多条。
<context:property-placeholder location="classpath:xxx.properties" ignore-unresolvable="true" /><context:property-placeholder location="classpath:yyy.properties" ignore-unresolvable="true" />
2. Spring bean中使用@Value注解获取指定参数。
// xxx.properties配置项:// server.ip=192.168.1.1// server.port=8080 @Value("${server.ip}")private String ip; @Value("${server.port}")private int port;
使用@Value注解的前提是当前对象的生命周期由Spring管理,是Spring bean,无论通过XML配置文件还是@Component、@Service等注解声明。假如一个对象的生命周期是我们程序自己管理的,比如常规用法下的new Object(),特别是做一些框架开发,经常用到Class.forName().newInstance()来实例化对象,那么想要反射为新创建对象的成员变量赋值时,如何借助Spring来获取已经解析好的properties属性值是个值得一试的探索。上述场景可以简化为:
如何在一个拥有Spring上下文的平台上,对不受Spring管理的对象使用依赖注入,达到类似@Value注解实现的功能。
思路也很简单,既然Spring已经解析过properties文件,那么通过某种手段把这些值暴露出来就可以了,EmbeddedValueResolverAware接口很适合做这件事情。Aware接口是定义一些能在Spring bean中操作Spring上下文信息的一类接口,常见的有ApplicationContextAware,可以在Spring bean中拿到ApplicationContext;BeanFactoryAware,可以在Spring bean中拿到Spring BeanFactory。这里的EmbeddedValueResolverAware也是类似功能,它定义了一个void setEmbeddedValueResolver(StringValueResolver resolver)接口方法,在bean初始化后,Spring回调setEmbeddedValueResolver()方法,将StringValueResolver对象注入到bean中,从这个对象中就能获取properties文件中的属性名称和值。用法如下:
1. 声明一个实现EmbeddedValueResolverAware接口的实例,用@Component注解声明为Spring bean,重写setEmbeddedValueResolver()方法,将StringValueResolver实例的引用保存下来,并且对外提供getPropertiesValue()方法,用于获取properties值。
@Componentpublic class PropertiesUtils implements EmbeddedValueResolverAware { privat StringValueResolver stringValueResolver; @Override public void setEmbeddedValueResolver(StringValueResolver resolver) { stringValueResolver = resolver; } public String getPropertiesValue(String name){ return stringValueResolver.resolveStringValue(name); }}
2. 通过${key}作为name格式调用getPropertiesValue()方法,获取properties值。
String name = "${server.ip}";String value = http://ju.outofmemory.cn/entry/propertiesUtils.getPropertiesValue(name);
StringValueResolve解析出来的值都是String类型的,非String类型需要在拿到参数String值后自行转换。
本文只对特定场景下使用EmbeddedValueResolverAware接口借助Spring上下文从properties文件中获取参数值做了一个简单介绍,此方法有效但不唯一,供参考。
- 通过Spring获取properties文件属性值
- spring 使用注解获取properties 文件属性值
- Spring EmbeddedValueResolverAware 接口获取properties文件属性
- Spring取得*.properties文件属性
- 关于spring使用@value注解获取properties文件属性问题
- spring文件读取properties文件属性
- (转) spring配置文件(xml)读取properties文件属性值
- Spring通过注解@Value获取properties配置
- spring项目properties文件属性配置到数据库
- properties文件属性值过长换行处理
- Spring获取properties的值[L]
- spring获取properties信息
- 关于加载Spring加载外部文件属性.properties的问题
- spring 之 PropertiesLoaderUtils 获取文件属性用法
- spring boot 获取jar 中xml文件属性
- ApplicationContextAware获取Spring上下文,通过基类获取properties中的配置属性
- 通过spring取properties资源
- 通过Spring读取properties配置文件
- js之间是如何调用的?比如自己写的js,怎么调用jQuery框架中的js
- 如何通过包名来获取下面所有的class文件
- android apk的反编译的相关操作
- loadRunner:microsoft visual c++ 2005 sp1运行时组件安装不成功,这是什么情况
- 174. Dungeon Game
- 通过Spring获取properties文件属性值
- vs2015安装记录2016年8月3日
- win7部署kafka_2.11
- 并查集(合作网络,LA 3027)
- 【Java面试题-001】什么是JVM?为什么称Java为跨平台的编程语言?
- 20161209 spring 跟马士兵学习记录
- 资源Resources
- Linux进程之初步了解
- java微信公众号第三方接入解析及全网检测代码示例