Feilong-core,一個讓Java開發(fā)更簡便的工具包
還是那句話,既然吃了面向對象編程這碗飯,能不重復造輪子就盡量不造,今天介紹一款Java開發(fā)工具包feilong-core
一、背景
在JAVA開發(fā)過程中,經常看到小伙伴直接從網上copy一長段代碼來使用,又或者寫的代碼很長很長很長...
痛點在于:
- 難以閱讀
 - 難以維護
 - sonar掃描結果債務長
 - codereview 被小伙伴鄙視
 - ....
 
feilong-core focus on J2SE是feilong platform的核心項目,創(chuàng)建于2008年
愿景: Reduce development,Release ideas (減少開發(fā),釋放思想), 希望可以減少書寫重復且繁雜的代碼,讓你從大量重復的底層代碼中脫身,提高工作效率;多思考業(yè)務的完整性,讓你的代碼更簡煉,易寫、易讀、易于維護;
經過多個版本迭代,已經逐步走向穩(wěn)定
二、feilong-core介紹
1. 簡介:
- 讓你從大量重復的底層代碼中脫身,提高工作效率;
 - 讓你的代碼更簡煉,易寫、易讀、易于維護;
 
2. feilong-core 優(yōu)點:
使用 feilong-core 的理由
- 有常用的工具類 (如 小巧實用日期處理 - DateUtil ,集合處理利器 - CollectionsUtil 等)
 - 有常用的JAVA常量類 (如 常用時間模式 — DatePattern , 常用時間間隔 —TimeInterval 等)
 - 不必要的Exception 轉成了RuntimeException,減少不必要的代碼
 - 國內中文注釋最完善的API
 - 有完善的單元測試
 
3. feilong-core亮點之處
- 有常用專屬工具類 (如處理日期的 DateUtil,處理集合的CollectionsUtil,類型轉換的ConvertUtil 等等等)
 - 有常用JAVA常量類 (如日期格式 DatePattern, 時間間隔 TimeInterval 等等等)
 - 不必要的Exception 轉成RuntimeException,減少不必要的代碼
 - 國內中文注釋最完善的API
 - 有完善的單元測試
 
4. feilong-core工具包大全
feilong-core工具包
5. 部分功能圖解
feilong-core功能圖解
三、feilong-core常用API操作
1. ConvertUtil操作集合工具類
以前調用某個api時,該api需要一個list參數,但是你現在只有單對象,這個場景你的代碼會怎么寫?
以前你要這么寫:
- List<Long> itemIds = new ArrayList<>();
 - itemIds.add(itemId);
 - sdkItemManager.findItemImageByItemIds(itemIds);
 
現在你可以這么寫:
- sdkItemManager.findItemImageByItemIds(ConvertUtil.toList(itemId));
 
使用ConvertUtil.toList()方法,你只需要一行代碼就可以搞定,代碼簡潔又清爽。
同樣,下面的代碼
以前你是這么寫:
- List<Long> skuIds = new ArrayList<>();
 - skuIds.add(9L);
 - skuIds.add(10L);
 - skuIds.add(13L);
 - skuIds.add(18L);
 - skuIds.add(20L);
 - BundleValidateResult result = bundleManager.validateBundle(skuIds);
 
現在你可以簡寫:
- List<Long> skuIds=ConvertUtil.toList(9L, 10L, 13L, 18L, 20L);
 - BundleValidateResult result = bundleManager.validateBundle(skuIds);
 
代碼的可讀性更高,更簡潔
2.CollectionsUtil.getPropertyValueList(Collection, String)
CollectionsUtil.getPropertyValueList(Collection
比如: 要提取SalesOrderCommand list里面的id屬性組成 List
以前你要這么寫:
- List<SalesOrderCommand> salesOrderList = sdkOrderDao.findOrdersWithOutPage(sorts, searchParam);
 - //...
 - List<Long> idList = new ArrayList<>(salesOrderList.size());
 - for (SalesOrderCommand cmd : salesOrderList){
 - idList.add(cmd.getId());
 - }
 - //查詢訂單行
 - List<OrderLineCommand> allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList);
 
現在你可以這么寫:
- List<SalesOrderCommand> salesOrderList = sdkOrderDao.findOrdersWithOutPage(sorts, searchParam);
 - //...
 - List<Long> idList =CollectionsUtil.getPropertyValueList(salesOrderList, "id");
 - //查詢訂單行
 - List<OrderLineCommand> allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList);
 
現在只需寫CollectionsUtil.getPropertyValueList(salesOrderPage, "id") 這段代碼,可以一行搞定 。
Tips: 相似的方法,還有CollectionsUtil.getPropertyValueSet(Collection
3. 不能不說的異常處理
眾所周知,JAVA有checked exception 和 uncheckedException之分,也就是我們常說的 RuntimeException和 Exception。
checked exception有其使用場景,但是我們日常開發(fā)過程中,并沒有對他做特殊的代碼處理
比如,大部分小伙伴的代碼是這樣的:
- public ContactCommand toContactCommand(ContactCommand command) {
 - try {
 - BeanUtils.copyProperties(command, this);
 - } catch (Exception e){
 - log.error("", e);
 - //or e.printStackTrace();
 - }
 - return command;
 - }
 
其實細究下來,上述代碼是不合理的, 如果轉換的時候出現了異常,這里就會出現數據沒有轉換過去的情況,
這理論上是 RuntimeException,但是org.apache.commons.beanutils.BeanUtils ``里面使用的是Exception,所以小伙伴不能不try... catch一下,可是catch `代碼里面有可能僅僅寫了log記錄,這有可能會出現邏輯問題 (本來需要拋出異常讓事務回滾)。
這時可以使用com.feilong.core.bean.BeanUtil
- public ContactCommand toContactCommand(ContactCommand command){
 - com.feilong.core.bean.BeanUtil.copyProperties(command, this);
 - return command;
 - }
 
當然,如果你確定copy的對象相同屬性名稱的類型是一致的,你可以使用 PropertyUtil,可以有效的避免不必要的類型轉換,提高效率
代碼簡潔,而且內部包裝成的是自定義的 BeanOperationException(RuntimeException),如果需要特殊處理,依然可以 try...catch...
4. 有豐富的javadoc
調用方法的時候,可以清晰的感知這個方法的 作用,示例,說明點,參數,返回值,異常等信息。
源碼示例:
- /**
 - * 計算兩個時間相差的的天數(<span style="color:red">絕對值</span>).
 - *
 - * <h3>說明:</h3>
 - * <blockquote>
 - * <p>
 - * 值=兩個時間相差毫秒的絕對值/{@link TimeInterval#MILLISECOND_PER_DAY}
 - * </p>
 - * </blockquote>
 - *
 - * <h3>示例:</h3>
 - *
 - * <blockquote>
 - *
 - * <pre class="code">
 - * DateExtensionUtil.getIntervalDay(
 - * toDate("2008-08-24",COMMON_DATE),
 - * toDate("2008-08-27",COMMON_DATE)) = 3
 - *
 - * DateExtensionUtil.getIntervalDay(
 - * toDate("2016-08-21 12:00:00",COMMON_DATE_AND_TIME),
 - * toDate("2016-08-22 11:00:00",COMMON_DATE_AND_TIME)) = 0
 - *
 - * DateExtensionUtil.getIntervalDay(
 - * toDate("2016-08-21",COMMON_DATE),
 - * toDate("2016-08-22",COMMON_DATE)) = 1
 - *
 - * DateExtensionUtil.getIntervalDay(
 - * toDate("2016-02-28",COMMON_DATE),
 - * toDate("2016-03-02",COMMON_DATE)) = 3
 - *
 - * DateExtensionUtil.getIntervalDay(
 - * toDate("2016-08-31",COMMON_DATE),
 - * toDate("2016-09-02",COMMON_DATE)) = 2
 - *
 - * </pre>
 - *
 - * </blockquote>
 - *
 - * @param date1
 - * date1
 - * @param date2
 - * date2
 - * @return 如果 <code>date1</code> 是null,拋出 {@link NullPointerException}<br>
 - * 如果 <code>date2</code> 是null,拋出 {@link NullPointerException}
 - * @see #getIntervalTime(Date, Date)
 - * @see #getIntervalDay(long)
 - * @since 1.6.0
 - */
 - public static int getIntervalDay(Date date1,Date date2){
 - return getIntervalDay(getIntervalTime(date1, date2));
 - }
 
如果你使用maven的話,只需要在依賴的jar 右鍵,maven--> download javadoc 或者 download sources會自動下載。
四、Maven使用配置
1. 如果你是導入jar包到工程
下載地址: https://github.com/venusdrogon/feilong-platform/tree/repository/com/feilong/platform/feilong-core
2. 如果你是Maven構建
- pom.xml引入feilong-core及倉庫地址
 
- <project>
 - ....
 - <properties>
 - <version.feilong-platform>2.1.0</version.feilong-platform>
 - ....
 - </properties>
 - ....
 - <repositories>
 - <repository>
 - <id>feilong-repository</id>
 - <url>https://raw.github.com/venusdrogon/feilong-platform/repository</url>
 - </repository>
 - </repositories>
 - ....
 - <dependencies>
 - ....
 - <dependency>
 - <groupId>com.feilong.platform</groupId>
 - <artifactId>feilong-core</artifactId>
 - <version>${version.feilong-platform}</version>
 - </dependency>
 - ....
 - </dependencies>
 - ....
 - </project>
 
3. feilong-util-all(全家桶,含IO操作,Net操作,Json,等工具類)
- pom.xml引入feilong-util-all及倉庫地址
 
- <project>
 - ....
 - <properties>
 - <version.feilong-platform>2.1.0</version.feilong-platform>
 - ....
 - </properties>
 - ....
 - <repositories>
 - <repository>
 - <id>feilong-repository</id>
 - <url>https://raw.github.com/venusdrogon/feilong-platform/repository</url>
 - </repository>
 - </repositories>
 - ....
 - <dependencies>
 - ....
 - <dependency>
 - <groupId>com.feilong.platform</groupId>
 - <artifactId>feilong-util-all</artifactId>
 - <version>${version.feilong-platform}</version>
 - </dependency>
 - ....
 - </dependencies>
 - ....
 - </project>
 
五、feilong依賴的第三方包
1. maven 依賴
- <dependencies>
 - <dependency>
 - <groupId>org.apache.commons</groupId>
 - <artifactId>commons-lang3</artifactId>
 - <version>3.6</version>
 - </dependency>
 - <dependency>
 - <groupId>org.apache.commons</groupId>
 - <artifactId>commons-collections4</artifactId>
 - <version>4.1</version>
 - </dependency>
 - <dependency>
 - <groupId>commons-beanutils</groupId>
 - <artifactId>commons-beanutils</artifactId>
 - <version>1.9.3</version>
 - </dependency>
 - </dependencies>
 
2. 你也可以自行下載:
commons-lang3
- 官方地址: http://commons.apache.org/proper/commons-lang/download_lang.cgi
 - maven地址: http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22commons-lang3%22%20AND%20g%3A%22org.apache.commons%22
 
commons-collections4
- 官方地址: http://commons.apache.org/proper/commons-collections/download_collections.cgi
 - 官方地址: http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22commons-collections4%22%20AND%20g%3A%22org.apache.commons%22
 
commons-beanutils
- 官方地址: http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi
 - maven地址: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22commons-beanutils%22%20AND%20a%3A%22commons-beanutils%22
 
六、feilong-core API大綱
七、參考
feilong-core: http://feilong-core.mydoc.io/



















 
 
 





 
 
 
 