รู้เบื้องต้นเกี่ยวกับ Apache Commons

แน่นอน เรามาเริ่มกันที่ประวัติศาสตร์กันเถอะ!

ทุกอย่างเริ่มต้นในปี 1999 ด้วยการจดทะเบียน "Apache Group" ในนามของ Apache Software Foundation (ASF) โครงการที่มูลนิธิสนับสนุนคือ Apache HTTPD Web Server ที่สร้างขึ้นระหว่างปี 2538 ถึง 2542

เช่นเดียวกับโครงการจาการ์ตา (โครงการจาการ์ตา) ซึ่งเป็นผลมาจากการทำงานร่วมกันของ Sun Microsystems, IBM, Oracle และพวกจาก Apache และในปี 2544 ในระหว่างการทำงาน ทีมพัฒนาสังเกตเห็นว่าพวกเขามักจะเขียนฟังก์ชันการทำงานเดียวกัน บางครั้งก็คัดลอกจากกันและกัน รหัสดังกล่าวเรียกว่าสำเร็จรูป พวกเขาสามารถรวบรวมโค้ดจำนวนมากที่ช่วยนักพัฒนาได้ แต่ไม่มีไลบรารีให้จัดเก็บ

นี่คือที่มาของโครงการ Jakarta Commons ซึ่งมีการเพิ่มส่วนประกอบ Java (ส่วนใหญ่ขึ้นอยู่กับรหัสที่มีอยู่) โครงการนี้เปลี่ยนชื่อเป็น Apache Commons ในภายหลัง

กว้างกว่านั้น Apache Commons คือ "คอลเลกชันขนาดใหญ่ของโปรแกรมอรรถประโยชน์ Java ขนาดเล็ก" ใช้ในโครงการโอเพ่นซอร์สหลายโครงการ

โปรแกรมอรรถประโยชน์ Apache Commons เป็นหัวใจสำคัญของโปรเจ็กต์ เช่น Apache Tomcat, Struts, Hibernate และอื่นๆ

แน่นอนว่าทั้งหมดนี้สามารถเชื่อมต่อได้ด้วยตนเองโดยไม่ต้องใช้ระบบสร้าง (Maven, Gradle) แต่เราจะไม่ทำเช่นนี้และเพียงแค่เพิ่มลงในโครงการของเรา

หากต้องการทำงานกับ Maven ให้เพิ่มการพึ่งพาที่เหมาะสมก่อน:

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

โดยที่${apache.common.version}คือเวอร์ชันของไลบรารีนี้

สำหรับ Gradle (Groovy):

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

ไลบรารี Apache Commons ยอดนิยม

นี่คือรายการของคลาสและวิธีการที่ใช้มากที่สุด:

Apache คอมมอนส์:Lang

ห้องสมุดนี้มีแพ็คเกจดังต่อไปนี้:


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

ที่นี่คุณสามารถทำงานกับสตริง การสะท้อน การทำให้เป็นอันดับ ออบเจกต์ และระบบได้อย่างสะดวกและรวดเร็ว จดวิธีที่ใช้มากที่สุด:

StringUtils

วิธีการจำนวนมากในการจัดการกับสตริง

  • is(Not)Blank/Empty(String) - ถึงเวลาที่จะลืมเกี่ยวกับการตรวจสอบประเภทนี้: if (s!=null && s.trim().length()>0)และมีการแทนที่ที่ดีที่นี่

StringEscapeUtils

  • (un)escapeSql(String) - แทนที่PreparedStatment
  • (un)escapeHtml(String) - เพื่อประมวลผลค่าจาก HTML

ToStringBuilder

  • reflectionToString(Object)เป็นการใช้งานtoString()ตามการสะท้อนกลับ เมื่อคุณเอาฟิลด์ออกโดยใช้การสะท้อน ผลลัพธ์ของเมธอดจะเปลี่ยนไป

EqualsBuilder & HashCodeBuilder

  • reflectionEquals/HashCode(Object)เป็นการทดแทนที่ดีสำหรับการสร้างอัตโนมัติโดยมีข้อดีในตัวมันเอง: วิธีการทั้งสองนี้คำนึงถึงการเปลี่ยนแปลงโครงสร้างในวัตถุระหว่างการดำเนินการ ตัวอย่างเช่น การเพิ่มฟิลด์

ข้อยกเว้นUtils

  • getFullStackTrace(Throwable) - ส่งออก StackTrace ทั้งหมดเป็นสตริง

Apache Commons: คอลเลกชัน

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

ไลบรารีที่ช่วยเติมเต็ม Java SE Collections Framework ได้อย่างสมบูรณ์แบบ

CollectionUtilsเป็นคลาสสำหรับการทำงานกับคอลเลกชันที่สะดวก:

    filter/find(Collection, Predicate) - กรองและค้นหาโดยเพรดิเคต forAllDo(Collection, Closure) - ดำเนินการปิดสำหรับแต่ละองค์ประกอบ แต่วิธีนี้เลิกใช้แล้วใช้Iterator.forEach() is(Not)Empty(Collection) - ช่วยให้คุณ ไม่ทำเครื่องหมายเป็น null ก่อนเรียก isEqualCollection(Collection, Collection) - ช่วยในการเปรียบเทียบสองคอลเลกชัน

นอกจากนี้ยังมีคลาสอื่น ๆ อีกมากมายที่มีระดับยูทิลิตี้ต่างกัน ที่นี่และด้านล่างฉันแสดงรายการที่ใช้บ่อยที่สุดในกรณีของฉันเท่านั้น

อาปาเช่คอมมอนส์: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

นอกจากนี้ยังช่วยในการทำงานกับไฟล์ใน Java:

FileUtils

  • copyDirectory(ไฟล์, ไฟล์) - คัดลอกไดเรกทอรี
  • copyFile(ไฟล์, ไฟล์) - คัดลอกไฟล์
  • listFiles(ไฟล์, สตริง[], บูลีน) - แสดงรายการไฟล์ตามนามสกุลและเรียกซ้ำ
  • readFileToString (ไฟล์, สตริง)
  • writeStringToFile (ไฟล์, สตริง)

IOUtils

  • closeQuietly(Reader/Writer/InputStream/OutputStream) - ปิดสตรีมข้อมูล
  • คัดลอก(InputStream, OutputStream) - คัดลอกจากสตรีมหนึ่งไปยังอีกสตรีมหนึ่ง