成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),溫嶺企業(yè)網(wǎng)站建設(shè),溫嶺品牌網(wǎng)站建設(shè),網(wǎng)站定制,溫嶺網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,溫嶺網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

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)類方法概覽

序號方法說明
1getInstance(propertyPath)獲取指定屬性文件路徑的引導(dǎo)類實(shí)例
2charset(charset)指定文件編碼,默認(rèn)為 UTF-8
3get(key)獲取 key 對應(yīng)的屬性值
4getOrDefault(key, defaultValue)獲取 key 對應(yīng)的屬性值,不存在則返回 defaultValue
5set(key, value)設(shè)置值(內(nèi)存)
6remove(key)移除值(內(nèi)存)
7flush()刷新內(nèi)存變更到當(dāng)前文件磁盤
9flush(path)刷新內(nèi)存變更到指定文件磁盤
10set(map)設(shè)置 map 信息到內(nèi)存
11set(bean)設(shè)置 bean 對象信息到內(nèi)存
12asMap()返回內(nèi)存中屬性信息,作為 Map 返回
13asBean(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)值說明
1value當(dāng)前字段名稱對應(yīng)的 property 屬性名稱
2converter默認(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í)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

文章名稱:javaproperty配置文件管理工具框架過程詳解
文章源于:http://jinyejixie.com/article26/peoicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、做網(wǎng)站企業(yè)網(wǎng)站制作、網(wǎng)站排名、虛擬主機(jī)用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
光泽县| 邳州市| 黄梅县| 安康市| 定南县| 潞西市| 望江县| 大方县| 弥勒县| 罗城| 开鲁县| 永修县| 桂东县| 韶关市| 田林县| 监利县| 沙坪坝区| 定州市| 松潘县| 监利县| 澎湖县| 封开县| 木里| 武鸣县| 营口市| 饶平县| 盱眙县| 辰溪县| 朝阳县| 桃源县| 宁蒗| 上栗县| 修水县| 襄城县| 青岛市| 麻江县| 增城市| 龙山县| 山东省| 淳安县| 土默特左旗|