|
|
Spring2 Core I I
Articolo di MassimilianoDessi
Spring 2.0 Core II parte vers 0.1 File di configurazione e recupero dei bean: Una volta che la BeanFactory (nota: anche lÂ’ApplicationContext è una BeanFactory) ha caricato i file di configurazione, la nostra applicazione è pronta per richiamare i bean che le necessitano. Se volessimo recuperare il bean in maniera esplicita in base allÂ’ id definito nel file di configurazione scriveremmo:
oppure per tipo
Per molti casi dÂ’uso, Spring fornisce dei bean che dietro le quinte forniscono il supporto per quasi tutte le operazioni, e non sarà quasi mai necessario richiamare esplicitamente i bean, ma sarà necessario solo scrivere i set degli oggetti di cui i nostri oggetti hanno bisogno. Configurazioni tramite metodi Set Vediamo come configurare i bean per iniettare le dipendenze tramite metodi set -Bean senza dipendenze
Id rappresenta lÂ’ id univoco con il quale identificare il bean e per riferirlo nellÂ’ iniettarlo in un altro bean Class identifica il nome completo della classe. -Bean con iniezione di un altro bean Supponiamo che il servizio di gestione degli utenti abbia bisogno di un iBATIS dao (che implementa UtentiDao) che è definito da qualche altra parte come bean ( che a sua volta necessita di un sqlMapClient e di un datasource).
La classe UtentiServiceImpl avrà quindi un metodo setUtentiDao.
Il property name corrisponde a setUtentiDao, mentre ref bean indica invece lÂ’id del bean che viene passato al metodo setUtentiDao
In questo modo iniettiamo altri bean, naturalmente non ha importanza lÂ’ordine in cui vengono definiti i bean nei file di configurazione Spring risolve comunque le dipendenze. Prima di istanziare gli oggetti, viene verificato che tutte le dipendenze siano soddisfatte. -Bean con iniezione di String o di int In una ipotetica classe ManagerAccessi che avesse bisogno di una campo saluto di tipo String
se invece avesse solo un campo che indica numero tentativi di tipo int
Se capitasse di dover mettere una stringa che rappresenta un numero, Spring distingue in base al tipo di parametri in ingresso, e inietta la dipendenza facendo la conversione appropriata al tipo corretto. -Bean con iniezione di Collections Una List può contenere qualsiasi oggetto, perciò nella dichiarazione possiamo mettere quello che vogliamo, un altro bean, una stringa, o anche una altra list
Con un Set la configurazione è la stessa
Con un Map mettiamo coppie chiavi valore, il valore può essere una stringa ma anche un altro bean
Con le Properties la configurazione è simile a Map, ma i valori possono essere solo Stringhe
-Inner bean Nel caso avessimo un bean che viene usato solo in un punto potremmo anche dichiararlo internamente al bean che lo usa. (per chiarezza di comprensione omettiamo la notazione breve p:)
Però in questo caso perdiamo la possibilità di riutilizzare lÂ’inner bean che infatti non ha neppure lÂ’id. -Numero di istanze del bean Il comportamento di default di Spring, è di considerare i bean come Singleton, cioè creare una sola istanza e condividerla tra gli oggetti che ne hanno bisogno. Nel caso si volesse invece che venga creata una nuova istanza ogni volta che viene richiamato il bean, bisogna dichiarare questo comportamento nella dichiarazione con singleton= false
-Metodi di inizializzazione e distruzione Vediamo come dichiarare che la nostra classe ha un metodo da richiamare per lÂ’inizializzazione e uno quando viene distrutto .
Configurazioni tramite costruttori Vediamo come configurare i bean per iniettare le dipendenze mediante i costruttori. LÂ’iniezione tramite i costruttori sovente avviene con classi di applicazioni preesistenti che vengono convertite allÂ’uso di Spring.
Questa configurazione specifica che al costruttore verrà passato un oggetto UtentiDao (interface)
Questa configurazione specifica che al costruttore verrà passata una Stringa o un int a seconda di quello che Spring attraverso lÂ’introspezione troverà come argomento al costruttore (come per i set) Nel caso ci possano essere delle ambiguità nei parametri da passare al costruttore, si può configurare anche la posizione dei parametri da passare, ad esempio String e URL.
Oppure più semplicemente con il tipo.
Autowiring Spring volendo, consente la possibilità di non dichiarare esplicitamente le dipendenze fra i bean, risolvendo le dipendenze automaticamente in base al tipo o al nome, ma i file di configurazione perdono così il minimo di autodocumentazione che hanno normalmente e rendono difficoltosa la manutenzione e le modifiche. PropertyPlaceHolderConfigurer In alcuni casi potrebbe essere agevole spostare alcune parti della configurazione dei bean su un file di properties. Definiamo quindi un bean con la lista degli eventuali file di properties in cui Spring deve cercare i valori dei segnaposto presenti nella configurazione.
e il file jdbc.properties conterrà: jdbc.driverClassName=org.postgresql.Driver jdbc.url=jdbc:postgresql://localhost:5432/jugavis jdbc.username=postgres jdbc.password=postgres Spring Core parte I Spring Core parte III Autore Massimiliano Dessì (http://www.jugsardegna.org/vqwiki/jsp/Wiki?MassimilianoDessi) ha iniziato a lavorare alla Sistemi Informativi (società IBM) , attualmente e' consulente per il Centro Servizi della regione Sardegna , dove sviluppa applicazioni J2EE basate su Spring, utilizzando metodologie agili. Cura la versione italiana di Jetspeed e di Spring BeanDoc, sviluppa la versione Web del progetto Jug Avis utilizzando Spring, tiene seminari e corsi su tecnologie J2EE e collabora con società ed enti italiani ed esteri per la realizzazione di portali J2EE. EÂ’ co-fondatore e consigliere del Jug Sardegna (http://www.jugsardegna.org). EÂ’ coordinatore dello Spring Framework Italian User Group (http://it.groups.yahoo.com/group/SpringFramework-it ) e del Jetspeed Italian Group http://it.groups.yahoo.com/group/jetspeed-it e del Groovy Italian User Group http://it.groups.yahoo.com/group/GroovyItalianUserGroup Bibliografia [1] Rod Johnson, Juergen Hoeller, Alef Arendsen, Thomas Risberg, Colin Sampaleanu, " Java Development with the Spring Framework", Wrox, 2005, ISBN: 0-7645-7483-3, http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764574833.html [2] Craig Walls and Ryan Breidenbach, " Spring in Action", Manning, 2005, ISBN 1932394354, http://www.manning.com/books/walls2 [3] Rob Harrop, Jan Machacek, "Pro Spring", Apress, 2005, ISBN 1-59059-461-4, http://www.apress.com/book/bookDisplay.html?bID=405 [4] Rod Johnson, Juergen Hoeller, " J2EE Development without EJB", Wrox, 2004, ISBN 0-7645-5831-5, http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764558315.html [5] Rod Johnson, " J2EEDesign and Development ", Wrox, 2002, ISBN 0-7645-4385-7, http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764543857.html [6] Seth Ladd, Darren Davison, Steven Devijver, Colin Yates " Expert Spring MVC and Web Flow", Apress, 2006, ISBN 159059584X, http://apress.com/book/bookDisplay.html?bID=10048 Riferimenti [7]”Inversion of Control Containers and the Dependency Injection pattern”: http://www.martinfowler.com/articles/injection.html [8]”Sito Spring”: http://www.springframework.org/ [9] ”Forum Spring”: http://forum.springframework.org/ [10]”Raccolta articoli e recensioni in italiano su Spring”: http://www.jugsardegna.org/vqwiki/jsp/Wiki?SpringFramework [11]” Spring Framework Italian User Group”: http://it.groups.yahoo.com/group/SpringFramework-it |