• 如果您想对本站表示支持,请随手点击一下广告即可~
  • 本站致力于提供原创、优秀的技术文章~
  • 有任何疑问或建议 均可以在站点右侧栏处 通过各种方式联系站长哦~
  • 【敏捷开发】经验构件库-Java版(exp-libs)

    Github EXP 197阅读 0评论

    源码

    Source : Github By EXP


    环境


    简介

    此构件库为本人多年编程总结提炼而成,把常用的功能模块作为原子API进行封装。

    另外也借用了不少出色的第三方构件,在其之上进行二次封装。

    过程中尽量确保了低耦合、高性能、强稳健、高复用、更易用等,确保能够满足日常开发需要、提高开发效率。

     
    既然别人不甘造轮子,那我就来奠造基石
    他人会用,只是用。我要用,则随心所欲


    安装与使用

    由于exp-libs封装了大量第三方构件,因此需要在开发环境直接导入到Maven的pom.xml文件使用,利用pom文件自动加载第三方依赖构件(若仅导入单个exp-libs.jar,有很多功能是无法使用的)。

    • POM坐标(精简版,过滤了不常用的第三方构件):


    功能模块

    主模块 子模块 组件包/类 说明 测试
    示例
    常用工具包
    exp.libs.utils
    编码工具
    encode
    Base64 Base64编解码  
        CharsetUtils 字符集编码转换 JUnit
        CompressUtils 压缩/解压(zip,gzip,tar,bz2)  
        CryptoUtils 加解密(MD5,DES,RSA) JUnit
        TXTUtils 任意文件与txt文件互转  
      格式转换工具
    format
    ESCUtils 数据格式转换
    (转义字符,BCP,CSV,TSV)
    JUnit
        JsonUtils JSON数据处理  
        XmlUtils XML数据处理  
        StandardUtils 标准化处理  
      图像工具
    img
    ImageUtils 图像处理  
        QRCodeUtils 二维码生成/解析  
      读写工具
    io
    FileUtils 磁盘文件处理  
        IOUtils IO流处理  
        JarUtils Jar文件处理  
      数值工具
    num
    BODHUtils 进制处理 JUnit
        IDUtils 唯一性ID生成器  
        NumUtils 数值处理 JUnit
        UnitUtils 单位转换  
      系统工具
    os
    ExitUtils 程序终止控制  
        JavaUtils Java语言处理  
        OSUtils 系统环境参数处理  
        ThreadUtils 线程处理  
      日期/时间工具
    time
    DateUtils 日期工具  
        TimeUtils 时间工具  
      校验工具
    verify
    RegexUtils 正则表达式处理 JUnit
        VerifyUtils 数据格式校验  
      其他工具
    other
    AnnotationUtils 神ta喵注释生成器  
        BoolUtils 布尔值处理  
        JSUtils JavaScript脚本处理  
        ListUtils 队列/集合操作 JUnit
        LogUtils 日志设置。
    基于org.slf4j(1.7.5)接口与
    ch.qos.logback(1.0.13)封装
     
        ObjUtils 对象处理 JUnit
        PathUtils 路径处理  
        RandomUtils 随机生成器
    (随机数、随机汉字、随机姓名等)
    JUnit
        StrUtils 字符串处理  
    二次封装组件
    exp.libs.warp
    版本管理组件
    ver
      借助Sqlite以UI方式管理项目版本信息,
    Maven项目发布插件自动化升级插件
    的部分功能也依赖此组件实现
    示例
      函数解析组件
    cep
      基于com.singularsys.jep(3.3.1)封装。
    去除时效限制,并新增多种自定义函数
    JUnit
      命令行组件
    cmd
      封装系统命令行操作  
      配置解析组件
    cmd
    xml配置文件解析
    xml
    基于org.dom4j(1.6.1)封装,支持定时
    刷新配置项、加载固有格式的配置区块。
    数据库组件网络组件等均利用此组件
    加载独立的配置区块
     
        ini配置文件解析
    ini
    未实装  
        kv配置文件解析
    kv
    未实装  
      数据库组件
    db
    关系型数据库工具
    sql
    基于com.cloudhopper.proxool(0.9.1)
    封装,支持mysql/oracle/sqlite等。
    提供连接池与JDBC两种数据库连接方
    式、及多种常用的增删改查操作,且可
    根据物理表模型反向生成JavaBean代码
    JUnit
        Redis客户端组件
    redis
    基于redis.clients.jedis(2.9.0)封装。
    支持单机/主从/哨兵/集群模式,屏蔽
    不同模式之间获取实例连接的差异性
    示例
      网络组件
    net
    Cookie组件
    cookie
    用于解析HTTP/HTTPS响应头中的
    Set-Cookie参数
     
        FTP组件
    ftp
    未实装  
        HTTP/HTTPS组件
    http
    提供在HTTP/HTTPS协议下,以长/短
    连接实现的GET、POST、Download
    方法,并支持自动解析Gzip流。
    基于java.net.HttpURLConnection
    commons-httpclient(3.1-rc1)封装,
    更借助org.bouncycastle.bcprov
    -jdk15on(1.54)使得可以在JDK1.6+环
    境均支持HTTPS-TLSv1.2协议(详见)
     
        Email组件
    mail
    基于javax.mail(1.4.1)封装,
    可用于邮件发送/抄送(支持加密)
    JUnit
        MQ组件
    mq
    未实装(jms/kafka)  
        端口转发器
    pf
    利用Socket实现的端口转发程序 示例
        Ping组件
    ping
    利用系统命令实现的ping/tracert,支持
    解析中/英文的win/linux系统的结果集
     
        Socket组件
    sock
    封装IO/NIO模式的Socket客户端/服务
    端的交互行为,只需实现业务逻辑
    示例
        Telnet组件
    telnet
    未实装  
        Webkit组件
    webkit
    基于org.seleniumhq.selenium(2.53.0)
    封装,主要提供无头浏览器
    com.codeborne.phantomjsdriver(1.2.1)
    的常用操作
     
        WebSocket客户端
    websock
    基于org.java-websocket(1.3.4)封装,
    支持ws与wss,提供数据帧的收发接口
     
        WebServices组件
    wsdl
    基于net.webservices.client(1.6.2)
    装,支持http/axis2/cxf,支持SSL模式
     
      IO组件
    io
    流式读取器
    flow
    流式读取超大文件/字符串  
        文件监听器
    listn
    可监听并触发指定目录树下所有
    文件/文件夹的增删改事件
     
        批量序列化读写器
    serial
    批量序列化/反序列任意实现了
    java.io.Serializable接口的对象
     
      OCR图文识别
    ocr
      基于com.sun.media.jai-imageio
    (1.1-alpha)封装。
    可识别图片中打印体的文字
    (文字不能旋转、变形,越正规的
    文字识别率越高)
    示例
      定时任务调度
    task
    在线生成cron表达式 基于org.quartz-scheduler(2.2.1)
    封装。仅保留了simple与cron调度器,
    并提供cron表达式换算对象
    示例
      线程组件
    thread
      提供抽象循环线程、回调线程池组件  
      模板文件组件
    tpl
      可定制含占位符的内容模板文件  
      Swing界面工具
    ui
    Swing组件
    cpt
    部分功能基于org.jb.beauty-eye(3.7)
    封装。可美化Swing外观,提供主窗口、
    浮动窗口、面板、表单、选框、系统托
    盘、布局样式等常用组件
    示例
        拓扑图绘制器
    topo
    基于org.eclipse.draw2d(1.0.0)
    org.jgraph.jGraph(1.0.0)封装。
    通过输入邻接矩阵(可含源宿点/必经
    点)自动根据边权换算边距,同时映射
    到极坐标系,绘制对应的拓扑图
    示例
      Excel组件
    xls
      基于org.apache.poi.poi-ooxml(3.9)
    封装。支持对xls/xlsx文件操作
    示例
    算法包
    exp.libs.algorithm
    基本算法
    basic
      排序、布隆过滤器、哈夫曼编码、
    哈希算法等(未实装)
     
      数据结构
    struct
    拓扑图
    graph
    拓扑图模型
    (支持有向/无向、源宿点、必经点)
     
        队列
    queue
    循环队列、生产者消费者队列、
    优先队列、流式并发队列等
    示例
        红黑树
    rbt
    未实装  
      搜索
    search
      未实装  
      数学
    math
    数学算法
    MathUtils
    归一化函数、卡马克浮点数快速算法、
    异或交换、二进制计数等
     
        素数
    Prime
    埃拉托斯特尼筛法
    时/空复杂度:O(n)
     
        矩阵运算
    Mat
    未实装  
      图论
    graph
      未实装  
      计算几何
    gmtry
      未实装  
      动态规划
    dync
      未实装  
      最短路径算法
    spa
    Dijkstra 适用单源最短路问题
    时间复杂度:O(V * lgV+E)
    测试
        BellmanFord 适用单源最短路问题(未实装)
    时间复杂度:O(V * E)
    空间复杂度:O(V + E)
     
        SPFA (BellmanFord的优化版(未实装)
    时间复杂度:O(k * E)
    空间复杂度:O(V + E)
     
        Johonson 适用全源最短路问题(未实装)
    时间复杂度:O(V * E * lgV)
     
        Floyd 适用全源最短路问题(未实装)
    时间复杂度:O(V^3)
    空间复杂度:O(V^2)
     
      启发式算法
    heuristic
    aca 蚁群算法(未实装)  
        qaca 量子蚁群算法(引入量子环境改进的
    蚁群算法:量子比特、量子概率幅、
    量子态、量子旋转门等)
    示例
      NP难问题
    np
    ispa 含必经点的最短路问题:
    自动根据场景用spa启发式算法求解
    测试
        tsp 旅行商问题(未实装)  
      深度学习
    dl
    tensorflow 基于org.tensorflow(1.6.0)封装。
    提供TensorFlow训练模型调用接口
     

    第三方构件修正记录

    修正commons-httpclient-3.1重定向丢失cookie问题

    使用此版本的HttpClient访问一个会发生重定向跳转的URL时,会自动执行跳转,直到跳转到最后一个目标URL为止,而这个自动的重定向行为无法被禁止。由此会发生两个现象:

    1. 使用HttpClient访问原始URL后,直接返回的状态码就是200 (而非302)
    2. 得到的Response Header是最后一个URL的Response Header,而中间跳转的URL的Response Header全部丢失

    第1点 其实影响不大,但 第2点 会导致中间跳转的URL所返回的Set-Cookie丢失

    对爬虫开发而言,这个问题是致命的:
      如要模拟登陆时,通常登陆成功后会返回cookie并自动重定向到网站主页,而这个过程中丢失了cookie就相当于登陆失败。

    因此主要针对 第2点 修正如下:
      记录中间所有URL返回的Response Header中的Set-Cookie,并全部追加到最后一个URL的Response Header中


    修正JDK1.6/1.7不支持TLSv1.2协议的HTTPS问题

    Bouncy Castle是一种用于 Java 平台的开放源码的轻量级密码术包,它支持大量的密码术算法,并提供JCE 1.2.1的实现

    JDK1.6/1.7仅支持遵循TLSv1.1协议的HTTPS访问,若网站强制要求使用TLSv1.2协议,JDK1.6/1.7会直接报错。

    为了解决这个问题,从而引入Bouncy Castle重写JDK的默认SSLSocket的通信安全密级协议,使得JDK1.6/1.7支持TLSv1.2。

    由于JDK1.8已支持TLSv1.2,因此此问题仅针对JDK1.6/1.7环境


    屏蔽proxool-0.9.1连接池调试日志

    此版本的连接池在运行期间会打印很多并非slf4j所打印的调试日志(基本都是使用commons-logging打印),无法通过配置屏蔽之,导致程序输出混乱。

    为此强制注释相关日志代码禁止其输出调试日志


    重写commons-io-2.4返回值

    主要针对其中的org.apache.commons.io.FileUtils的函数返回值进行重写:
    把其中的void返回值修正为boolean,并捕获相关抛出的异常,以便进行二次封装


    修正构造函数可见性

    修改org.apache.poi.xssf.usermodel.XSSFHyperlink的可见性为public,以便进行二次封装


    去除类的final声明

    去除类org.quartz.CronExpression的final声明,以便进行二次封装


    版权声明

    Copyright (C) 2016-2018 By EXP License: GPL v3


    转载请注明:EXP 技术分享博客 » 【敏捷开发】经验构件库-Java版(exp-libs)

    喜欢 (2) 分享 (0)
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址