亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

property

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

特點

  • 優(yōu)雅地進行屬性文件的讀取和更新
  • 寫入屬性文件后屬性不亂序
  • 靈活定義編碼信息
  • 使用 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 為存在的屬性值名稱。

讀取屬性指定默認值

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) 設置值(內(nèi)存)
6 remove(key) 移除值(內(nèi)存)
7 flush() 刷新內(nèi)存變更到當前文件磁盤
9 flush(path) 刷新內(nèi)存變更到指定文件磁盤
10 set(map) 設置 map 信息到內(nèi)存
11 set(bean) 設置 bean 對象信息到內(nèi)存
12 asMap() 返回內(nèi)存中屬性信息,作為 Map 返回
13 asBean(bean) 返回內(nèi)存中屬性信息到 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 默認轉(zhuǎn)換實現(xiàn) DefaultValueConverter 對當前字段進行屬性的轉(zhuǎn)換處理

自定義轉(zhuǎn)換類

DateValueConverter.java

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

實現(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ù)組,這里暫時給出比較簡單的實現(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;
}

暫時只支持 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 別稱類似。

后續(xù)特性

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

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

相關文章

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

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

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

    SpringBoot中的@EnableConfigurationProperties注解詳細解析

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

    java 獲取當前路徑下的所有xml文檔的方法

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

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

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