这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
property
property 是 java 实现的 property 框架。
特点
快速开始
环境依赖
Maven 3.x
Jdk 1.7+
Maven 引入依赖
<dependency> <groupId>com.github.houbb</groupId> <artifactId>property</artifactId> <version>0.0.4</version> </dependency>
入门案例
读取属性
PropertyBs.getInstance("read.properties").get("hello");
read.properties 为文件路径,hello 为存在的属性值名称。
读取属性指定默认值
final String value = PropertyBs.getInstance("read.properties")
.getOrDefault("hello2", "default");
read.properties 为文件路径,hello2 为不存在的属性值名称,default 为属性不存在时返回的默认值。
设置属性
PropertyBs.getInstance("writeAndFlush.properties").setAndFlush("hello", "world-set");
writeAndFlush.properties 为文件路径,hello 为需要设置的属性信息。
引导类方法概览
序号 | 方法 | 说明 |
---|---|---|
1 | getInstance(propertyPath) | 获取指定属性文件路径的引导类实例 |
2 | charset(charset) | 指定文件编码,默认为 UTF-8 |
3 | get(key) | 获取 key 对应的属性值 |
4 | getOrDefault(key, defaultValue) | 获取 key 对应的属性值,不存在则返回 defaultValue |
5 | set(key, value) | 设置值(内存) |
6 | remove(key) | 移除值(内存) |
7 | flush() | 刷新内存变更到当前文件磁盘 |
9 | flush(path) | 刷新内存变更到指定文件磁盘 |
10 | set(map) | 设置 map 信息到内存 |
11 | set(bean) | 设置 bean 对象信息到内存 |
12 | asMap() | 返回内存中属性信息,作为 Map 返回 |
13 | asBean(bean) | 返回内存中属性信息到 bean 对象中 |
对象
简介
我们希望操作 property 可以想操作对象一样符合 OO 的思想。
设置值
User user = new User(); user.setName("hello"); user.setHobby("hobby"); final long time = 1574147668411L; user.setBirthday(new Date(time)); PropertyBs propertyBs = PropertyBs.getInstance("setBean.properties") .set(user); Assert.assertEquals("hobby", propertyBs.get("myHobby")); Assert.assertEquals("1574147668411", propertyBs.get("birthday"));
读取值
PropertyBs propertyBs = PropertyBs.getInstance("setBean.properties" .set("myHobby", "play") .set("birthday", "1574147668411"); User user = new User(); propertyBs.asBean(user); Assert.assertEquals("play", user.getHobby()); Assert.assertEquals(1574147668411L, user.getBirthday().getTime());
对象定义
User.java
public class User { private String name; @PropertyField("myHobby") private String hobby; @PropertyField(converter = DateValueConverter.class) private Date birthday; }
@PropertyField 注解
序号 | 属性 | 默认值 | 说明 |
---|---|---|---|
1 | value | 当前字段名称 | 对应的 property 属性名称 |
2 | converter | 默认转换实现 DefaultValueConverter | 对当前字段进行属性的转换处理 |
自定义转换类
DateValueConverter.java
这个就是我们针对 Date 类型,自己实现的处理类型。
实现如下:
public class DateValueConverter implements IValueConverter { @Override public Object fieldValue(String value, IFieldValueContext context) { return new Date(Long.parseLong(value)); } @Override public String propertyValue(Object value, IPropertyValueContext context) { Date date = (Date)value; return date.getTime()+""; } }
集合
说明
有时候一个属性可能是集合或者数组,这里暂时给出比较简单的实现。
将字段值直接根据逗号分隔,作为属性值。
测试案例
UserArrayCollection userArrayCollection = buildUser(); PropertyBs propertyBs = PropertyBs.getInstance("setBeanArrayCollection.properties") .set(userArrayCollection); Assert.assertEquals("array,collection", propertyBs.get("alias")); Assert.assertEquals("array,collection", propertyBs.get("hobbies"));
对象定义
UserArrayCollection.java
public class UserArrayCollection { private List<String> alias; private String[] hobbies; }
暂时只支持 String 类型,不想做的过于复杂。
后期将考虑添加各种类型的支持。
多级对象
说明
有时候我们在一个对象中会引用其他对象,比如 对象 a 中包含对象 b。
这里采用 a.b.c 这种方式作为属性的 key, 更加符合使用的习惯。
测试案例
设置
Book book = new Book(); book.name("《海底两万里》").price("12.34"); UserEntry user = new UserEntry(); user.name("海伦").book(book).age("10"); PropertyBs propertyBs = PropertyBs.getInstance("setBeanEntry.properties") .set(user); Assert.assertEquals("海伦", propertyBs.get("name")); Assert.assertEquals("10", propertyBs.get("age")); Assert.assertEquals("《海底两万里》", propertyBs.get("book.name")); Assert.assertEquals("12.34", propertyBs.get("book.price"));
读取
Map<String, String> map = new HashMap<>(); map.put("name", "海伦"); map.put("age", "10"); map.put("book.name", "《海底两万里》"); map.put("book.price", "12.34"); UserEntry userEntry = new UserEntry(); PropertyBs.getInstance("setBeanEntry.properties") .set(map) .asBean(userEntry); Assert.assertEquals("UserEntry{name='海伦', age=10, book=Book{name='《海底两万里》', price=12.34}}", userEntry.toString());
对象定义
UserEntry.java
public class UserEntry { private String name; private String age; @PropertyEntry private Book book; }
Book.java
public class Book { private String name; private String price; }
@PropertyEntry 说明
@PropertyEntry 注解用来标识一个字段是否采用多级对象的方式表示。
这个注解只有一个属性,就是 value(),可以用来给当前字段指定一个别称,和 @PropertyField 别称类似。
后续特性
提供更多内置的类型转换实现
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
在此对话框,您可以编辑一些已存在的 压缩配置 参数或者删除它们。您无法在此创建新配置文件,创建新配置文件的方式在 压缩配置 主题里有描述帮助。 要编辑配置文件参数,您必须将光标先移到配置文件名上,然后单击 “编辑”按钮并在 配置参数 对话框内对要改变的数值做参数设置。必须注意的是,保存在配置文件中的压缩选项是不能更改的,您只能修改少数如名称和默认状态之类的配置文件相关参数。如果您必须修改压缩选项,
问题内容: 我有以下示例代码: 我需要查找将哪些SQL查询发送到数据库。 如何使用SQL Express和VS 2012剖析EF查询? 有什么工具吗? 问题答案: 您在这里有一些选择。 通过在运行时打印出来检查查询看到(我认为这仅适用于查询,可能不是最好在上述情况下) 使用管理工作室内置的SQL事件探查器 使用Entity Framework Profiler(一个非常好的第三方工具,带有试用版,
本文向大家介绍Linux进程管理工具supervisor安装配置教程,包括了Linux进程管理工具supervisor安装配置教程的使用技巧和注意事项,需要的朋友参考一下 环境:CentOS 7 官方文档:http://supervisord.org/ 安装 # yum install -y epel-release # yum install -y supervisor 启动 # supervi
(商用请联系作者获取授权,个人用户无限制) 简介 FTP Manage Tools(FTP管理工具)是一个基于WEB的FTP客户端程序,你可以通过它对你的FTP文件进行管理。 程序采用AJAX,由PHP+JQuery/JavaScript完成。 你可以在http://119.29.112.32/ 进行体验。 包含功能 包括文件新建、上传、下载、复制、剪切、粘贴、删除、重命名,对Windows平台的
本文向大家介绍CentOS 7配置LNMP开发环境及配置文件管理详解,包括了CentOS 7配置LNMP开发环境及配置文件管理详解的使用技巧和注意事项,需要的朋友参考一下 安装并配置MySQL 5.6 从CentOS从7.x开始默认使用MariaDB。MariaDB完全兼容MySQL,包括API和命令行。但是很多时候我们还是会想要安装MySQL,所以不能直接通过yum命令安装。 下载源安装文件 本
配置文件分为用户级配置和项目级配置。 用户级配置包含用户的环境及 UI 相关的选项,包括: 用户选项 中的所有内容。 扩展工具,包括已配置的扩展列表。 其他工具中的UI相关选项,例如 Target 组件下 站点地图 的选定视图。 项目级配置包含在特定目标应用程序上执行的工作相关的选项,包括: 项目选项中的所有内容。 单个Burp工具中的非UI相关选项,例如 代理 (Proxy) 和 扫描器 (Sc