Giới thiệu về Apache Commons

Tất nhiên, hãy bắt đầu với lịch sử!

Tất cả bắt đầu vào năm 1999 với việc đăng ký "Nhóm Apache" thay mặt cho Quỹ Phần mềm Apache (ASF). Dự án được quỹ hỗ trợ là Máy chủ web HTTPD Apache được tạo từ năm 1995 đến 1999.

Tương tự là Dự án Jakarta (dự án Jakarta), xuất hiện do sự hợp tác của Sun Microsystems, IBM, Oracle và những người từ Apache. Và vào năm 2001, trong quá trình làm việc, nhóm phát triển nhận thấy rằng họ thường viết cùng một chức năng, đôi khi họ chỉ sao chép chức năng của nhau. Mã như vậy được gọi là bản soạn sẵn. Họ quản lý để thu thập một lượng lớn mã giúp các nhà phát triển, nhưng không có thư viện để lưu trữ.

Đây là cách dự án Jakarta Commons ra đời, trong đó các thành phần Java được thêm vào (chủ yếu dựa trên mã hiện có). Dự án sau đó được đổi tên thành Apache Commons.

Nói rộng hơn, Apache Commons là “một bộ sưu tập lớn các tiện ích Java nhỏ”. Nó được sử dụng trong nhiều dự án mã nguồn mở.

Các tiện ích Apache Commons là trung tâm của các dự án như Apache Tomcat, Struts, Hibernate và các dự án khác.

Tất nhiên, tất cả điều này có thể được kết nối thủ công mà không cần hệ thống xây dựng (Maven, Gradle), nhưng chúng tôi sẽ không làm điều này và chỉ thêm chúng vào dự án của chúng tôi.

Để làm việc với Maven, trước tiên hãy thêm phụ thuộc thích hợp:

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>${apache.common.version}</version>
</dependency>

Trong đó ${apache.common.version} là phiên bản của thư viện này.

Đối với lớp (Groovy):

implementation 'org.apache.commons:commons-lang3:3.12.0'

Thư viện Apache Commons phổ biến

Dưới đây là danh sách các lớp và phương thức được sử dụng nhiều nhất:

Apache Commons:Lang

Thư viện này chứa các gói sau:


Packages
org.apache.commons.lang
org.apache.commons.lang.builder
org.apache.commons.lang.enum
org.apache.commons.lang.enums
org.apache.commons.lang.exception
org.apache.commons.lang.math
org.apache.commons.lang.mutable
org.apache.commons.lang.reflect
org.apache.commons.lang.text
org.apache.commons.lang.time

Tại đây, bạn có thể làm việc thuận tiện và nhanh chóng với các chuỗi, phản chiếu, tuần tự hóa, các đối tượng và hệ thống. Hãy lưu ý các phương pháp được sử dụng nhiều nhất:

ChuỗiUtils

Một số lượng lớn các phương pháp để thao tác chuỗi.

  • is(Not)Blank/Empty(String) - đã đến lúc quên loại kiểm tra này: if (s!=null && s.trim().length()>0) và có một sự thay thế tốt ở đây

ChuỗiThoátUtils

  • (un)escapeSql(String) - Thay thế PreparedStatment
  • (un)escapeHtml(String) - để xử lý các giá trị từ HTML

ToStringBuilder

  • ReflectionToString(Object) là một triển khai của toString() dựa trên sự phản chiếu. Khi bạn xóa một trường bằng phản chiếu, kết quả của phương thức sẽ thay đổi.

EqualsBuilder & HashCodeBuilder

  • ReflectEquals/HashCode(Object) là một sự thay thế tốt cho việc tạo tự động với lợi thế riêng của nó: hai phương thức này tính đến các thay đổi cấu trúc trong đối tượng trong quá trình hoạt động, chẳng hạn như thêm các trường

Ngoại lệUtils

  • getFullStackTrace(Throwable) - xuất toàn bộ StackTrace dưới dạng chuỗi

Apache Commons: Bộ sưu tập

Packages
org.apache.commons.collections4
org.apache.commons.collections4.bag
org.apache.commons.collections4.bidimap
org.apache.commons.collections4.collection
org.apache.commons.collections4.comparators
org.apache.commons.collections4.functors
org.apache.commons.collections4.iterators
org.apache.commons.collections4.keyvalue
org.apache.commons.collections4.list
org.apache.commons.collections4.map
org.apache.commons.collections4.multimap
org.apache.commons.collections4.multiset
org.apache.commons.collections4.properties
org.apache.commons.collections4.queue
org.apache.commons.collections4.sequence
org.apache.commons.collections4.set
org.apache.commons.collections4.splitmap
org.apache.commons.collections4.trie
org.apache.commons.collections4.trie.analyzer

Một thư viện bổ sung hoàn hảo cho Java SE Collections Framework.

CollectionUtils là một lớp để làm việc thuận tiện với các bộ sưu tập:

    filter/find(Collection, Predicate) - lọc và tìm kiếm theo predicate forAllDo(Collection, Closure) - thực hiện Closure cho từng phần tử, nhưng phương thức này không được dùng nữa , hãy sử dụng Iterator.forEach() is(Not)Empty(Collection) - cho phép bạn không kiểm tra null trước khi gọi isEqualCollection(Collection, Collection) - giúp so sánh hai bộ sưu tập

Ngoài ra còn có nhiều lớp khác với các mức độ tiện ích khác nhau. Ở đây và bên dưới tôi liệt kê những cách được sử dụng phổ biến nhất hoàn toàn trong trường hợp của tôi.

Apache Commons:IO

Packages
org.apache.commons.io
org.apache.commons.io.comparator
org.apache.commons.io.file
org.apache.commons.io.file.spi
org.apache.commons.io.filefilter
org.apache.commons.io.function
org.apache.commons.io.input
org.apache.commons.io.input.buffer
org.apache.commons.io.monitor
org.apache.commons.io.output
org.apache.commons.io.serialization

Ngoài ra, nó giúp làm việc với các tệp trong Java:

FileUtils

  • copyDirectory(File, File) - sao chép thư mục
  • copyFile(Tệp, Tệp) - sao chép tệp
  • listFiles(File, String[], boolean) - liệt kê các tệp theo phần mở rộng và đệ quy
  • readFileToString(Tệp, Chuỗi)
  • writeStringToFile(Tệp, Chuỗi)

IOUtils

  • closeQuietly(Reader/Writer/InputStream/OutputStream) - đóng luồng dữ liệu
  • copy(InputStream, OutputStream) - sao chép từ luồng này sang luồng khác