欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java property配置文件管理工具框架過程詳解

 更新時(shí)間:2019年11月21日 09:46:24   作者:葉止水  
這篇文章主要介紹了java property配置文件管理工具框架過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了java property配置文件管理工具框架過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

property

property 是 java 實(shí)現(xiàn)的 property 框架。

特點(diǎn)

  • 優(yōu)雅地進(jìn)行屬性文件的讀取和更新
  • 寫入屬性文件后屬性不亂序
  • 靈活定義編碼信息
  • 使用 OO 的方式操作 property 文件
  • 支持多級對象引用

快速開始

環(huán)境依賴

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 為存在的屬性值名稱。

讀取屬性指定默認(rèn)值

final String value = PropertyBs.getInstance("read.properties")

.getOrDefault("hello2", "default");

read.properties 為文件路徑,hello2 為不存在的屬性值名稱,default 為屬性不存在時(shí)返回的默認(rèn)值。

設(shè)置屬性

PropertyBs.getInstance("writeAndFlush.properties").setAndFlush("hello", "world-set");

writeAndFlush.properties 為文件路徑,hello 為需要設(shè)置的屬性信息。

引導(dǎo)類方法概覽

序號 方法 說明
1 getInstance(propertyPath) 獲取指定屬性文件路徑的引導(dǎo)類實(shí)例
2 charset(charset) 指定文件編碼,默認(rèn)為 UTF-8
3 get(key) 獲取 key 對應(yīng)的屬性值
4 getOrDefault(key, defaultValue) 獲取 key 對應(yīng)的屬性值,不存在則返回 defaultValue
5 set(key, value) 設(shè)置值(內(nèi)存)
6 remove(key) 移除值(內(nèi)存)
7 flush() 刷新內(nèi)存變更到當(dāng)前文件磁盤
9 flush(path) 刷新內(nèi)存變更到指定文件磁盤
10 set(map) 設(shè)置 map 信息到內(nèi)存
11 set(bean) 設(shè)置 bean 對象信息到內(nèi)存
12 asMap() 返回內(nèi)存中屬性信息,作為 Map 返回
13 asBean(bean) 返回內(nèi)存中屬性信息到 bean 對象中

對象

簡介

我們希望操作 property 可以想操作對象一樣符合 OO 的思想。

設(shè)置值

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 注解

序號 屬性 默認(rèn)值 說明
1 value 當(dāng)前字段名稱 對應(yīng)的 property 屬性名稱
2 converter 默認(rèn)轉(zhuǎn)換實(shí)現(xiàn) DefaultValueConverter 對當(dāng)前字段進(jìn)行屬性的轉(zhuǎn)換處理

自定義轉(zhuǎn)換類

DateValueConverter.java

這個(gè)就是我們針對 Date 類型,自己實(shí)現(xiàn)的處理類型。

實(shí)現(xiàn)如下:

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

集合

說明
有時(shí)候一個(gè)屬性可能是集合或者數(shù)組,這里暫時(shí)給出比較簡單的實(shí)現(xiàn)。

將字段值直接根據(jù)逗號分隔,作為屬性值。

測試案例

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;
}

暫時(shí)只支持 String 類型,不想做的過于復(fù)雜。

后期將考慮添加各種類型的支持。

多級對象

說明

有時(shí)候我們在一個(gè)對象中會引用其他對象,比如 對象 a 中包含對象 b。

這里采用 a.b.c 這種方式作為屬性的 key, 更加符合使用的習(xí)慣。

測試案例

設(shè)置

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 注解用來標(biāo)識一個(gè)字段是否采用多級對象的方式表示。

這個(gè)注解只有一個(gè)屬性,就是 value(),可以用來給當(dāng)前字段指定一個(gè)別稱,和 @PropertyField 別稱類似。

后續(xù)特性

提供更多內(nèi)置的類型轉(zhuǎn)換實(shí)現(xiàn)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決SpringBoot jar包中的文件讀取問題實(shí)現(xiàn)

    解決SpringBoot jar包中的文件讀取問題實(shí)現(xiàn)

    這篇文章主要介紹了解決SpringBoot jar包中的文件讀取問題實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot中的@EnableConfigurationProperties注解詳細(xì)解析

    SpringBoot中的@EnableConfigurationProperties注解詳細(xì)解析

    這篇文章主要介紹了SpringBoot中的@EnableConfigurationProperties注解詳細(xì)解析,如果一個(gè)配置類只配置@ConfigurationProperties注解,而沒有使用@Component或者實(shí)現(xiàn)了@Component的其他注解,那么在IOC容器中是獲取不到properties 配置文件轉(zhuǎn)化的bean,需要的朋友可以參考下
    2024-01-01
  • java 獲取當(dāng)前路徑下的所有xml文檔的方法

    java 獲取當(dāng)前路徑下的所有xml文檔的方法

    這篇文章主要介紹了java如何獲取當(dāng)前路徑下的所有xml文檔,需要的朋友可以參考下
    2014-05-05
  • SpringBoot集成Zipkin實(shí)現(xiàn)分布式全鏈路監(jiān)控

    SpringBoot集成Zipkin實(shí)現(xiàn)分布式全鏈路監(jiān)控

    這篇文章主要介紹了SpringBoot集成Zipkin實(shí)現(xiàn)分布式全鏈路監(jiān)控的方法啊,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 最新評論