Wprowadzenie do Apache Commons
Oczywiście zacznijmy od historii!
Wszystko zaczęło się w 1999 roku od rejestracji „Apache Group” w imieniu Apache Software Foundation (ASF). Projektem wspieranym przez fundację był serwer WWW Apache HTTPD tworzony w latach 1995-1999.
Tak samo było z projektem Jakarta (projekt Jakarta), który powstał w wyniku współpracy Sun Microsystems, IBM, Oracle i chłopaków z Apache. A w 2001 roku podczas pracy zespół programistów zauważył, że często piszą tę samą funkcjonalność, czasem po prostu kopiują ją od siebie. Taki kod nazywa się płytą kotłową. Udało im się zebrać dużą ilość kodu, który pomógł programistom, ale nie było biblioteki do jego przechowywania.
Tak narodził się projekt Jakarta Commons, w którym dodano komponenty Javy (głównie w oparciu o istniejący kod). Projekt został później przemianowany na Apache Commons.
Mówiąc szerzej, Apache Commons to „duży zbiór małych narzędzi Java”. Jest używany w wielu projektach open source.
Narzędzia Apache Commons są sercem projektów, takich jak Apache Tomcat, Struts, Hibernate i inne.
Oczywiście to wszystko da się podłączyć ręcznie, bez systemu budowania (Maven, Gradle), ale my tego nie zrobimy i po prostu dodamy je do naszego projektu.
Aby pracować z Mavenem, najpierw dodaj odpowiednią zależność:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${apache.common.version}</version>
</dependency>
Gdzie ${apache.common.version} to wersja tej biblioteki.
Dla Gradle (Groovy):
implementation 'org.apache.commons:commons-lang3:3.12.0'
Popularne biblioteki Apache Commons
Oto lista najczęściej używanych klas i metod:
Apache Commons: lang
Ta biblioteka zawiera następujące pakiety:
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
Tutaj możesz wygodnie i szybko pracować ze stringami, odbiciem, serializacją, obiektami i systemem. Zwróćmy uwagę na najczęściej stosowane metody:
StringUtils
Ogromna liczba metod manipulowania ciągami znaków.
- is(Not)Blank/Empty(String) - czas zapomnieć o tego typu sprawdzaniu: if (s!=null && s.trim().length()>0) , a tu jest dobry zamiennik
StringEscapeUtils
- (un)escapeSql(String) - Zastąp PreparedStatment
- (un)escapeHtml(String) - do przetwarzania wartości z HTML
ToStringBuilder
- odbicieToString(Object) to implementacja metody toString() oparta na odbiciu. Gdy usuniesz pole za pomocą odbicia, wynik metody ulegnie zmianie.
EqualsBuilder i HashCodeBuilder
- ReflectionEquals/HashCode(Object) to dobry zamiennik automatycznego generowania, który ma swoją zaletę: te dwie metody uwzględniają zmiany strukturalne obiektu podczas działania, np. dodawanie pól
Narzędzia wyjątku
- getFullStackTrace(Throwable) - wypisuje cały StackTrace jako ciąg znaków
Apache Commons: kolekcje
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
Biblioteka, która doskonale uzupełnia środowisko Java SE Collections Framework.
CollectionUtils to klasa do wygodnej pracy z kolekcjami:
-
filter/find(Collection, Predicate) - filtrowanie i wyszukiwanie według predykatu forAllDo(Collection, Closure) - wykonuje Closure dla każdego elementu, ale ta metoda jest przestarzała , użyj Iterator.forEach() is(Not)Empty(Collection) - pozwala aby nie sprawdzać wartości null przed wywołaniem isEqualCollection(Collection, Collection) - pomaga porównać dwie kolekcje
Istnieje również wiele innych klas o różnym poziomie użyteczności. Tutaj i poniżej wymieniam najczęściej stosowane wyłącznie w moim przypadku.
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
Dodatkowo ułatwia pracę z plikami w Javie:
FileUtils
- copyDirectory(Plik, Plik) - kopiuje katalogi
- copyFile(File, File) - skopiuj pliki
- listFiles(File, String[], boolean) - wyświetla pliki według rozszerzenia i rekurencyjnie
- readFileToString(Plik, Ciąg)
- writeStringToFile(Plik, Ciąg)
IOUTtils
- closeQuietly(Reader/Writer/InputStream/OutputStream) - zamyka strumień danych
- copy(InputStream, OutputStream) - kopiowanie z jednego strumienia do drugiego