Commons BeanUtils: accedere ai JavaBean con minimo sforzo
Apache Commons è una famiglia di progetti mirati a creare componenti Java di facile uso e riuso. Si tratta di componenti generici, piuttosto di base e generalmente ben testati di cui è utile conoscere l’esistenza per risparmiare tempo ed evitare di reinventare la ruota nei nostri progetti.
In questo blog mostro l’utilità di Commons BeanUtils, una libreria fondamentale della famiglia Commons.
JavaBeans e loro property
I JavaBean, o più semplicemente “bean” sono classi Java che soddisfano certe convenzioni. Per esempio devono avere un costruttore senza parametri e il loro stato è rappresentato da “property” manipolabili attraverso metodi getter e setter con nomi ben precisi derivati dal nome della property a cui fanno riferimento.
Con l’aiuto dell’ottimo IntelliJ IDEA già provato in un precedente blog, scriviamo un bean per rappresentare dei libri:

Questo genere di classi e i loro oggetti sono pensati per essere manipolati facilmente da tool e programmi. Questi infatti possono scoprire le property di un bean utilizzando l’introspection di Java, quindi senza avere conoscenza del bean in fase di compilazione.
l seguente frammento di codice mostra come possiamo scrivere un metodo printProperty() in grado di stampare una qualunque proprietà di un oggetto bean conoscendone solo il nome.

L’esempio mostra come l’accesso alle proprietà di un bean utilizzando l’introspection non è difficile ma richiede sicuramente molte righe di codice. Questo è un aspetto negativo.
Dal lato positivo però possiamo immaginare che il codice, scritto una volta per una specifica necessità, sia facile da riutilizzare anche in altri contesti. Varrebbe la pena metterlo in una libreria…
Commons BeanUtils
BeanUtils è, in forma più estesa e generalizzata, la libreria di cui sopra. Riscriviamo il metodo printPropery() per trarre vantaggio di BeanUtils:

Il codice si è molto ridotto, la leggibilità è migliorara e stiamo utilizzando una libreria già estesamente testata da altri.
Una rapida carrellata delle funzionalità disponibile in BeanUtils:
- accesso in lettura e scrittura di proprietà semplici, indicizzate (vettori) e mappate (mappe chiave-valore);
- accesso alle property delle property, quindi a strutture di beans e non solo a beans singoli;
- DynaBeans per creare bean dinamicamente a run-time senza definire una classe Java dedicata;
- conversioni di tipo durante l’assegnazione di valori alle property (p.e., conversione da stringhe al tipo specifico della property).
In conclusione BeanUtils è utile:
- per chi scrive framework che manipoleranno oggetti di tipo non noto a priori
- per chi vuole sfruttare la reflection/introspection per rendere più generiche funzioni ripetitive.
Per tutti gli altri BeanUtils è probabilmente una complicazione rispetto alle più semplici chiamate a get() e set(). Ma sapere che BeanUtils esiste può sempre tornare utile.

