中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

javaproperty配置文件管理工具框架過(guò)程詳解

這篇文章主要介紹了java property配置文件管理工具框架過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(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ò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,溫嶺網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

property

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

特點(diǎn)

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

快速開(kāi)始

環(huán)境依賴

Maven 3.x

Jdk 1.7+

Maven 引入依賴

<dependency>
  <groupId>com.github.houbb</groupId>
  <artifactId>property</artifactId>
  <version>0.0.4</version>
</dependency>

入門(mén)案例

讀取屬性

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

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

對(duì)象

簡(jiǎn)介

我們希望操作 property 可以想操作對(duì)象一樣符合 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());

對(duì)象定義

User.java

public class User {
  private String name;
  @PropertyField("myHobby")
  private String hobby;
  @PropertyField(converter = DateValueConverter.class)
  private Date birthday;

}

@PropertyField 注解

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

自定義轉(zhuǎn)換類

DateValueConverter.java

這個(gè)就是我們針對(duì) 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()+"";
  }
}

集合

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

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

測(cè)試案例

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

對(duì)象定義

UserArrayCollection.java

public class UserArrayCollection {
  private List<String> alias;
  private String[] hobbies;
}

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

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

多級(jí)對(duì)象

說(shuō)明

有時(shí)候我們?cè)谝粋€(gè)對(duì)象中會(huì)引用其他對(duì)象,比如 對(duì)象 a 中包含對(duì)象 b。

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

測(cè)試案例

設(shè)置

Book book = new Book();
book.name("《海底兩萬(wàn)里》").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("《海底兩萬(wàn)里》", 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", "《海底兩萬(wàn)里》");
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='《海底兩萬(wàn)里》', price=12.34}}",
    userEntry.toString());

對(duì)象定義

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 說(shuō)明

@PropertyEntry 注解用來(lái)標(biāo)識(shí)一個(gè)字段是否采用多級(jí)對(duì)象的方式表示。

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

后續(xù)特性

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

文章名稱:javaproperty配置文件管理工具框架過(guò)程詳解
文章源于:http://www.rwnh.cn/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
新乡县| 张家港市| 广南县| 凌云县| 榆中县| 南平市| 新化县| 肃宁县| 温宿县| 莱阳市| 同德县| 永寿县| 郸城县| 隆德县| 侯马市| 修文县| 桓台县| 独山县| 梧州市| 永和县| 喜德县| 布拖县| 宜川县| 博乐市| 伊春市| 赣州市| 治多县| 新田县| 同江市| 错那县| 金昌市| 扎鲁特旗| 绥化市| 延庆县| 嘉义县| 临海市| 宁安市| 体育| 开阳县| 清流县| 温州市|