Introdução ao Apache Commons
Claro, vamos começar com a história!
Tudo começou em 1999 com o registro do "Apache Group" em nome da Apache Software Foundation (ASF). O projeto apoiado pela fundação foi o Apache HTTPD Web Server criado entre 1995 e 1999.
O mesmo foi o Jakarta Project (projeto Jakarta), que surgiu como resultado da colaboração da Sun Microsystems, IBM, Oracle e os caras do Apache. E em 2001, durante o trabalho, a equipe de desenvolvimento percebeu que muitas vezes escrevem a mesma funcionalidade, às vezes simplesmente copiam um do outro. Esse código é chamado clichê. Eles conseguiram coletar uma grande quantidade de código que ajudou os desenvolvedores, mas não havia biblioteca para armazená-lo.
Assim nasceu o projeto Jakarta Commons, no qual foram adicionados componentes Java (principalmente baseados em código existente). O projeto foi posteriormente renomeado para Apache Commons.
Mais amplamente, o Apache Commons é “uma grande coleção de pequenos utilitários Java”. É usado em muitos projetos de código aberto.
Os utilitários Apache Commons estão no centro de projetos como Apache Tomcat, Struts, Hibernate e outros.
Claro, tudo isso pode ser conectado manualmente, sem um sistema de compilação (Maven, Gradle), mas não faremos isso e apenas adicionaremos ao nosso projeto.
Para trabalhar com o Maven, primeiro adicione a dependência apropriada:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${apache.common.version}</version>
</dependency>
Onde ${apache.common.version} é a versão desta biblioteca.
Para Gradle (Groovy):
implementation 'org.apache.commons:commons-lang3:3.12.0'
Bibliotecas populares do Apache Commons
Aqui está uma lista das classes e métodos mais usados:
Apache Commons:Lang
Esta biblioteca contém os seguintes pacotes:
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
Aqui você pode trabalhar de forma conveniente e rápida com strings, reflexão, serialização, objetos e o sistema. Vamos observar os métodos mais usados:
StringUtils
Um grande número de métodos para manipular strings.
- is(Not)Blank/Empty(String) - é hora de esquecer esse tipo de verificação: if (s!=null && s.trim().length()>0) , e há uma boa substituição aqui
StringEscapeUtils
- (un)escapeSql(String) - Substitui PreparedStatment
- (un)escapeHtml(String) - para processar valores do HTML
ToStringBuilder
- reflectionToString(Object) é uma implementação de toString() baseada em reflexão. Ao remover um campo usando reflexão, o resultado do método será alterado.
EqualsBuilder & HashCodeBuilder
- reflectionEquals/HashCode(Object) é um bom substituto para geração automática com sua própria vantagem: esses dois métodos levam em consideração mudanças estruturais no objeto durante a operação, por exemplo, adicionando campos
ExceptionUtils
- getFullStackTrace(Throwable) - imprima todo o StackTrace como uma string
Apache Commons: coleções
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
Uma biblioteca que complementa perfeitamente o Java SE Collections Framework.
CollectionUtils é uma classe para um trabalho conveniente com coleções:
-
filter/find(Collection, Predicate) - filtragem e busca por predicado forAllDo(Collection, Closure) - executa Closure para cada elemento, mas este método está obsoleto , use Iterator.forEach() is(Not)Empty(Collection) - permite não verificar como nulo antes de chamar isEqualCollection(Collection, Collection) - ajuda a comparar duas coleções
Há também muitas outras classes de vários níveis de utilidade. Aqui e abaixo eu listo os mais usados puramente no meu 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
Além disso, ajuda a trabalhar com arquivos em Java:
FileUtils
- copyDirectory(Arquivo, Arquivo) - copia diretórios
- copyFile(Arquivo, Arquivo) - copia arquivos
- listFiles(File, String[], boolean) - lista arquivos por extensão e recursivamente
- readFileToString(arquivo, string)
- writeStringToFile(Arquivo, String)
IOUtils
- closeQuietly(Reader/Writer/InputStream/OutputStream) - fecha o fluxo de dados
- copy(InputStream, OutputStream) - copia de um stream para outro
GO TO FULL VERSION