Introduzione ad Apache Commons

Certo, iniziamo con la storia!

Tutto è iniziato nel 1999 con la registrazione del "Gruppo Apache" per conto della Apache Software Foundation (ASF). Il progetto sostenuto dalla fondazione è stato l'Apache HTTPD Web Server creato tra il 1995 e il 1999.

Lo stesso era il progetto Jakarta (progetto Jakarta), che è apparso come risultato della collaborazione di Sun Microsystems, IBM, Oracle e i ragazzi di Apache. E nel 2001, durante il lavoro, il team di sviluppo ha notato che spesso scrivono la stessa funzionalità, a volte semplicemente la copiano l'una dall'altra. Tale codice è chiamato boilerplate. Sono riusciti a raccogliere una grande quantità di codice che ha aiutato gli sviluppatori, ma non c'era alcuna libreria per archiviarlo.

È così che è nato il progetto Jakarta Commons, in cui sono stati aggiunti componenti Java (basati per lo più su codice esistente). Il progetto è stato successivamente rinominato Apache Commons.

Più in generale, Apache Commons è "una grande raccolta di piccole utilità Java". È utilizzato in molti progetti open source.

Le utility Apache Commons sono al centro di progetti come Apache Tomcat, Struts, Hibernate e altri.

Ovviamente tutto questo può essere collegato manualmente, senza un sistema di compilazione (Maven, Gradle), ma non lo faremo e li aggiungeremo semplicemente al nostro progetto.

Per lavorare con Maven, aggiungi prima la dipendenza appropriata:

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

Dove ${apache.common.version} è la versione di questa libreria.

Per Gradle (Groovy):

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

Librerie popolari di Apache Commons

Ecco un elenco delle classi e dei metodi più utilizzati:

Apache Commons:Lang

Questa libreria contiene i seguenti pacchetti:


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

Qui puoi lavorare comodamente e rapidamente con stringhe, riflessione, serializzazione, oggetti e sistema. Notiamo i metodi più utilizzati:

StringUtils

Un numero enorme di metodi per manipolare le stringhe.

  • is(Not)Blank/Empty(String) - è tempo di dimenticare questo tipo di controllo: if (s!=null && s.trim().length()>0) , e qui c'è una buona sostituzione

StringEscapeUtils

  • (un)escapeSql(String) - Sostituisce PreparedStatment
  • (un)escapeHtml(String) - per elaborare valori da HTML

ToStringBuilder

  • reflectionToString(Object) è un'implementazione di toString() basata sulla reflection. Quando rimuovi un campo usando la riflessione, il risultato del metodo cambierà.

EqualsBuilder e HashCodeBuilder

  • reflectionEquals/HashCode(Object) è un buon sostituto della generazione automatica con il suo vantaggio: questi due metodi tengono conto dei cambiamenti strutturali nell'oggetto durante il funzionamento, ad esempio l'aggiunta di campi

ExceptionUtils

  • getFullStackTrace(Throwable) - emette l'intero StackTrace come stringa

Apache Commons: raccolte

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

Una libreria che integra perfettamente il Java SE Collections Framework.

CollectionUtils è una classe per lavorare comodamente con le raccolte:

    filter/find(Collection, Predicate) - filtro e ricerca per predicato forAllDo(Collection, Closure) - esegue Closure per ogni elemento, ma questo metodo è deprecato , usa Iterator.forEach() is(Not)Empty(Collection) - ti permette non controllare su null prima di chiamare isEqualCollection(Collection, Collection) - aiuta a confrontare due raccolte

Esistono anche molte altre classi con diversi livelli di utilità. Qui e sotto elenco i più usati prettamente nel mio caso.

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

Inoltre, aiuta a lavorare con i file in Java:

FileUtils

  • copyDirectory(File, File) - copia le directory
  • copyFile(File, File) - copia i file
  • listFiles(File, String[], boolean) - elenca i file per estensione e in modo ricorsivo
  • readFileToString(File, Stringa)
  • writeStringToFile(File, Stringa)

IOUtils

  • closeQuietly(Reader/Writer/InputStream/OutputStream) - chiude il flusso di dati
  • copy(InputStream, OutputStream) - copia da un flusso all'altro