Feilong-core,一个让Java开发更简便的工具包

Reduce development,Release ideas (减少开发,释放思想), 希望可以
首页 新闻资讯 行业资讯 Feilong-core,一个让Java开发更简便的工具包

[[373381]]

 还是那句话,既然吃了面向对象编程这碗饭,能不重复造轮子就尽量不造,今天介绍一款Java开发工具包feilong-core

一、背景

在JAVA开发过程中,经常看到小伙伴直接从网上copy一长段代码来使用,又或者写的代码很长很长很长...

痛点在于

  • 难以阅读

  • 难以维护

  • sonar扫描结果债务长

  • codereview 被小伙伴鄙视

  • ....

feilong-core focus on J2SE是feilong platform的核心项目,创建于2008年

愿景: Reduce development,Release ideas (减少开发,释放思想),  希望可以减少书写重复且繁杂的代码,让你从大量重复的底层代码中脱身,提高工作效率;多思考业务的完整性,让你的代码更简炼,易写、易读、易于维护;

经过多个版本迭代,已经逐步走向稳定

二、feilong-core介绍

1. 简介:

  • 让你从大量重复的底层代码中脱身,提高工作效率;

  • 让你的代码更简炼,易写、易读、易于维护;

2. feilong-core 优点:

使用 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);
  • 1.

  • 2.

  • 3.

  • 4.

现在你可以这么写:

复制

sdkItemManager.findItemImageByItemIds(ConvertUtil.toList(itemId));
  • 1.

使用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);
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

现在你可以简写:


复制

List<Long> skuIds=ConvertUtil.toList(9L, 10L, 13L, 18L, 20L); BundleValidateResult result = bundleManager.validateBundle(skuIds);
  • 1.

  • 2.

代码的可读性更高,更简洁

2.CollectionsUtil.getPropertyValueList(Collection,  String)

CollectionsUtil.getPropertyValueList(Collection, String) :  表示简化循环遍历集合,取到对象指定的属性 propertyName 的值,然后调用list.add()方法添加到集合中,拼成 List(ArrayList)  这一过程

比如: 要提取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);
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

现在你可以这么写:


复制

List<SalesOrderCommand> salesOrderList = sdkOrderDao.findOrdersWithOutPage(sorts, searchParam);  //...  List<Long> idList =CollectionsUtil.getPropertyValueList(salesOrderList, "id");  //查询订单行 List<OrderLineCommand> allLineList = sdkOrderLineDao.findOrderDetailListByOrderIds(idList);
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

现在只需写CollectionsUtil.getPropertyValueList(salesOrderPage, "id") 这段代码,可以一行搞定  。

Tips: 相似的方法,还有CollectionsUtil.getPropertyValueSet(Collection, String)以及  CollectionsUtil.getPropertyValueMap(Collection, String, String)。

3. 不能不说的异常处理

众所周知,JAVA有checked exception 和 uncheckedException之分,也就是我们常说的  RuntimeException和 Exception。

checked exception有其使用场景,但是我们日常开发过程中,并没有对他做特殊的代码处理

比如,大部分小伙伴的代码是这样的:

复制

public ContactCommand toContactCommand(ContactCommand command) {     try {         BeanUtils.copyProperties(command, this);     } catch (Exception e){         log.error("", e);         //or e.printStackTrace();     }     return command; }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

其实细究下来,上述代码是不合理的, 如果转换的时候出现了异常,这里就会出现数据没有转换过去的情况,

这理论上是 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; }
  • 1.

  • 2.

  • 3.

  • 4.

当然,如果你确定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)); }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

  • 30.

  • 31.

  • 32.

  • 33.

  • 34.

  • 35.

  • 36.

  • 37.

  • 38.

  • 39.

  • 40.

  • 41.

  • 42.

  • 43.

  • 44.

  • 45.

  • 46.

  • 47.

  • 48.

  • 49.

  • 50.

  • 51.

  • 52.

 如果你使用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>
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

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>
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

五、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>
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

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/