java的property_java property配置文件管理工具框架过程详解

java property配置文件管理工具框架过程详解

发布于 2020-3-15|

复制链接

摘记: 这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下property

..

这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下propertyproperty 是 java 实现的 property 框架。特点

优雅地进行属性文件的读取和更新

写入属性文件后属性不乱序

灵活定义编码信息

使用 OO 的方式操作 property 文件

支持多级对象引用

快速开始

环境依赖

Maven 3.xJdk 1.7+Maven 引入依赖

```xml

com.github.houbb

property

0.0.4

```

入门案例

读取属性

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 的思想。设置值

```bash

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"));

```

读取值

```bash

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

```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 类型,自己实现的处理类型。实现如下:

```java

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()+"";

}

}

```

集合

说明

有时候一个属性可能是集合或者数组,这里暂时给出比较简单的实现。将字段值直接根据逗号分隔,作为属性值。测试案例

```bash

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

```java

public class UserArrayCollection {

private List alias;

private String[] hobbies;

}

```

暂时只支持 String 类型,不想做的过于复杂。后期将考虑添加各种类型的支持。多级对象

说明

有时候我们在一个对象中会引用其他对象,比如 对象 a 中包含对象 b。这里采用 a.b.c 这种方式作为属性的 key, 更加符合使用的习惯。测试案例

设置

```bash

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"));

```

读取

```bash

Map 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

```java

public class UserEntry {

private String name;

private String age;

@PropertyEntry

private Book book;

}

```

Book.java

```java

public class Book {

private String name;

private String price;

}

```

@PropertyEntry 说明

@PropertyEntry 注解用来标识一个字段是否采用多级对象的方式表示。这个注解只有一个属性,就是 value(),可以用来给当前字段指定一个别称,和 @PropertyField 别称类似。后续特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值