zoukankan      html  css  js  c++  java
  • [转]JAVA程序员一定知道的优秀第三方库(2016版)

    JAVA程序员一定知道的优秀第三方库(2016版)

    来源:技匠 发布时间:2016-05-14 阅读次数:2269,http://www.admin10000.com/document/8155.html

    几乎每个程序员都知道要“避免重复发明轮子”的道理——尽可能使用那些优秀的第三方框架或库,但当真正进入开发时,我却经常发现他们有时并不知道那些轮子在哪里。最近,我在业余时间带几个年轻的程序员一起做了一个很小的商业项目,而在一起开发的过程中,我几乎在所有需要判断字符串是否为空的地方,看到了下面的代码:

    if(inputString == null || inputString.length == 0){......}

    除了字符串判断是否为空之外,还有很多字符串处理或其他数据类型判断的方法,缺少经验的程序员们往往都会想办法自己来写。这些代码当然都没有错,但我们应该尽可能去利用那些已经非常成熟的第三方库,以更标准的方式去解决这些通用的问题,并且提高开发效率。

    下面便是我整理的,在大部分项目中使用到的优秀JAVA第三方库 ,供大家参考:


    JAVA核心扩展

    正如前面说到的字符串判断的例子,JAVA的标准库虽然提供了那些最基本的数据类型操作方法,但仍然对一些常见的需求场景,缺少实用的工具类。而另一些则是JAVA标准库本身不够完善,需要第三方库去加以补充的。

    Apache Commons Lang

    Apache Commons Lang是Apache最著名的JAVA库 (GitHub上的代码库),它是对java.lang的很好扩展,包含了大量非常实用的工具类,其中用的最多的有StringUtils,DateUtils,NumberUtils等。之前提到的代码利用StringUtils可以改写为:

    if(StringUtils.isBlank(inputString)){...}

    除了Apache Commons Lang,还有一些其他的Apache库也是对JAVA本身的很好补充,如Apache Commons CollectionApache Commons IOApache Commons Math

    在Maven项目中加入Apache Commons Lang这个库:

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.4</version>
    </dependency>

    Google Guava

    Google Guava在国内项目中很少使用,但我合作过的一些国外JAVA工程师几乎都会推荐这个JAVA库。它包含了Google在自己的JAVA项目中所使用的一些核心JAVA库。包含了对:集合,缓存,并发库,字符串处理, I/O等各个方面的支持。另外Google开发的库总是以性能著称。

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>19.0</version>
    </dependency>

    Joda-Time

    Java SE 8之前的JAVA版本中对日期的支持是比较差的,Joda-Time被经常被使用来替换原有的日期系统,它能够支持更多的日历体系,并提供了很多非常方便的日期处理方法,而且它的性能也是非常出色的。(GitHub上的代码库

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.3</version>
    </dependency>

    Web框架

    Web框架是一个应用最核心的部分,因此我总是推荐使用那些最标准的,并且有良好社区支持的框架,比如Spring和Struts。

    Spring

    Spring是一个开源的应用框架,它包含很多子项目比如Spring MVC, Spring Security, Spring Data,Sping Boot等等,几乎可以满足你项目上的所有需要。它也是我开发Web项目的首选后端框架。(GitHub上的代码库

    添加下面的引用,在Spring MVC项目中加入这个库(以下仅引入Spring Core的支持)

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>

    Struts 2

    Struts 2 是Apache最有名的Web框架,它也是一个免费开源的MVC框架。Struts也能很好地支持REST,SOAP,AJAX等最新技术。(GitHub上的代码库

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.3.28</version>
    </dependency>

    除了上面提到的两个最长哟你的Web框架之外,还有如Google Web ToolkitTapestryStrips等一些优秀的框架可供选择 。


    数据库(持久层)

    持久层框架的选择对一个项目的成败同样非常关键,它会直接影响到系统的性能、质量、安全以及稳定性。

    MyBatis

    MyBatis是我最喜欢的数据库(持久层)框架,因为它完全是基于SQL语句的(通过SQL来提取数据并自动映射为所需的数据对象),能够为我带来足够的灵活性。(GitHub上的代码库


    添加下面的引用,在Maven项目中加入这个库(如需配合Spring使用,可选择对应的Maven库)

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.0</version>
    </dependency>

    Spring JDBC / Spring Data

    Spring JDBC并不是独立的Spring子项目,而是一个整合在Spring核心库内,为JDBC操作提供基本封装处理的模块。通过简单的配置后,可以通过对Context中的jdbcTemplate进行调用来获得结果。

    String SQL = "select name from Student where id = ?";
    String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

    Spring Data是Spring的一个子项目,提供了更加强大的持久层功能封装,和对象映射功能。它能与Spring MVC很好地整合。你可以利用JPA和CrudRepository来极大简化持久层的开发。

    public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    
        Employee findByFirstName(String firstName);
    
        List<Employee> findByLastName(String lastName);
    }


    Hibernate

    可能是国内用得最广泛的持久层框架了,它非常强大,但用好它并不容易,你需要了解它的内部机制,否则可能会出现一些无法预见的性能问题,特别是在数据量特别大的时候。(GitHub上的代码库

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.1.0.Final</version>
    </dependency>

    除了上面一些最常用的持久层库,还有几个优秀的库,比如 JDOJOOQApache DbUtils


    日志

    JAVA中也包含了日志记录功能,但它在处理日志分级,日志的存储,以及日志的备份、归档方面都不够出色,因此在项目中我们一般都会使用第三方日志库来处理日志。

    SLF4J- Simple Logging Facade for Java (SLF4J)

    SLF4J为我们提供了一个日志服务的抽象层,基于它你可以选择不同的日志实现,比如:java.util.logging,logback,log4j,当你需要改变日志实现组件时,不需要修改任何代码,只需要更改一些相应的配置就可以了。(GitHub上的代码库

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>

    Apache Log4j

    Log4j是最有名的日志组件,通过简单的配置后就能在程序中方便地记录各个级别的日志,它的日志文件能够根据不同的规则进行命名以及归档。

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.5</version>
    </dependency>

    Logback

    Logback比Log4j更新,它被视为是log4j的一个替代者。它比log4j 的性能更好(log4j 2的性能可能比logback更好),而且更完整地实现了SLF4J的接口,并且自带了更多的功能,比如自动压缩日志,更多的filter等。

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.7</version>
    </dependency>

    JSON

    JSON已经成为最广泛使用的一种数据传输格式,因此程序中对JSON的处理也正变得越来越多。下面是我推荐的一些JSON处理库:

    Jackson

    Jackson是一个多用途的Java库,用于处理JSON数据。使用它可以很方便地在JSON数据和Java对象之间进行转换。(GitHub上的代码库

       ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
       User user = mapper.readValue(new File("user.json"), User.class);

    Google Gson

    Google开发的JSON库,可以实现JSON字符串与JAVA对象之间的转换,使用起来也非常方便。

       Gson gson = new Gson();
       String[] strings = {"abc", "def", "ghi"};
       gson.toJson(strings);  // ==> ["abc", "def", "ghi"]

    图表

    JFreeChart

    能够为你生成各种类型的图表,并且支持多种输出格式,包括PNG和JPEG图片格式,以及向PDF,EPS,SVG等矢量图。


    JasperReports

    JasperReports提供了一套完整的报表解决方案,帮助用户使用用Java语言来开发具有报告功能的程序。JasperReports的模版采用XML格式,从数据库中抽取数据,并以PDF、HTML、XLS、CSV及XML等各种格式生成报表。它的一大优势是能够处理大数据量的报表。


    测试

    JUnit

    JUnit是目前使用最广泛的JAVA单元测试库通过它,你可以i非常方便地编写自己的单元测试代码,并进行自动化测试。(GitHub上的代码库

        @Test
        public void lookupEmailAddresses() {
            assertThat(new CartoonCharacterEmailLookupService().getResults("looney"), allOf(
                not(empty()),
                containsInAnyOrder(
                    allOf(instanceOf(Map.class), hasEntry("id", "56"), hasEntry("email", "roadrunner@fast.org")),
                    allOf(instanceOf(Map.class), hasEntry("id", "76"), hasEntry("email", "wiley@acme.com"))
                )
            ));
        }

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    Office文档处理

    Apache POI

    Apache POI是一个免费的开源库用于处理Microsoft Office文档。用它可以使用Java读取和创建,修改MS Excel文件,MS Word和MSPowerPoint文件。(GitHub上的代码库

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.14</version>
    </dependency>

    docx4j

    docx4j是另一套基于JAXB的Office文档(docx,pptx,xlsx)处理库。(GitHub上的代码库

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j</artifactId>
        <version>3.3.0</version>
    </dependency>

    XML解析

    JDOM

    JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。在 JDOM 中,XML 元素用 Element 表示,XML 属性用 Attribute 表示,XML 文档本身用 Document 表示。因此这些API都非常直观易用。(GitHub上的代码库

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom</artifactId>
        <version>2.0.2</version>
    </dependency>

    DOM4J

    DOM4J是一个处理XML的开源框架,它整合了对于XPath,并且完全支持DOM,SAX,JAXP等技术。

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>

    xerces

    Xerces是一个开放源代码的XML语法分析器。从JDK1.5以后,Xerces就成了JDK的XML默认实现

    添加下面的引用,在Maven项目中加入这个库

    <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.11.0</version>
    </dependency>

    其他值得关注的代码库

    jSOUP

    jSOUP提供了一套与外部互联网的网页(HTML)进行交互的API,能够让使用者非常方便地 利用CSS选择器来解析HTML页面,从而获取需要的内容。

    Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
    Elements newsHeadlines = doc.select("#mp-itn b a");

    Lomobok

    Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在IDE中加入Lombok,开发人员可以节省构建诸如 hashCode()和equals()这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。


    Netty

    Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。

  • 相关阅读:
    利用相关的Aware接口
    java 值传递和引用传递。
    权限控制框架Spring Security 和Shiro 的总结
    优秀代码养成
    Servlet 基础知识
    leetcode 501. Find Mode in Binary Search Tree
    leetcode 530. Minimum Absolute Difference in BST
    leetcode 543. Diameter of Binary Tree
    leetcode 551. Student Attendance Record I
    leetcode 563. Binary Tree Tilt
  • 原文地址:https://www.cnblogs.com/zhougaojun/p/5777280.html
Copyright © 2011-2022 走看看