這篇文章主要介紹了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)
快速開始
環(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í)有所幫助,也希望大家多多支持創(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)