SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Spring Framework




       Core e AOP
J2EE Applications

  Composte da più “blocchi” in collaborazione
  tra loro
  Utilizzano containers invasivi per la gestione
  di aspetti (transazioni,ecc.)
  Spesso non rispettano il principio “1:1” –
  design level requirements-implementation
Le caratteristiche desiderabili

  DRY principle
  Modularity
  Information hiding
  Separation of Concerns
DRY Principle

  Ogni sottosistema dovrebbe avere una
  rappresentazione singola, non ambigua,
  autoritativa.
Modularity

  Un’unità in cui gli elementi strutturali sono
  strettamente legati tra loro e poco legati con
  le altre unità
Information hiding

  Ogni modulo è caratterizzato dalla sua
  conoscenza della decisione di design che
  nasconde agli altri. La sua interfaccia o
  definizione è scelta per rivelare il meno
  possibile sul suo funzionamento.
Separation of Concerns

  Significa focalizzare su una cosa alla volta
Caratteristiche principali

  Lightweight container
  Strato di astrazione per transazioni
  Strato di astrazione JDBC
  Integrazione AOP
  Piena integrabilità con i frameworks più
  diffusi
Spring lightweight container

  Configurazione centralizzata degli oggetti applicativi
  e dei loro collegamenti
  Non invasivo (le classi non devono implementare
  particolari interfaces o estendere classi del
  framework
  Assembla un sistema complesso a partire da
  componenti disaccoppiati (POJO)
Astrazione per Transazioni

  Integra un transaction manager
  “preconfezionato” utilizzando le funzionalità
  AOP
  Demarca le transazioni a livello di
  configurazione senza dover gestire a codice
  le problematiche legate alla specificità del
  contesto.
Strato di astrazione JDBC

  Uniforma la gestione delle transazioni
  Si integra con le più diffuse tecnologie ORM
  Classi di supporto (templates)
  DAO layer semplificato
  Riduzione possibilità errori
Funzionalità AOP

  Approccio AOP integrato
  Supporto di una parte del progetto
  “AspectJ”
  Proxy-based system
  AOP full language support
I moduli di Spring
Il file spring-context
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
</beans>


XML BASED Configuration Metadata
Attenzione: l’import degli xsd deve essere eseguito in base alle
funzionalità implementate
Istanziare i beans

  In fase di startup i beans vengono pre-istanziati
  come singletons
  Gli eventuali errori vengono rilevati subito senza
  attendere un tempo indefinito
  In ogni caso i beans possono essere istanziati
  quando richiesto (lazy-init)
  Ciascun bean può essere configurato affinchè
  venga restituita una istanza (scope="prototype“)
Definizione di un bean

<bean id="dataSource" class="org.springframework.jdbc.
datasource.DriverMana gerDataSource">
<property name="driverClassName“ value="com.mysql.jdbc.
Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/corsi" />
<property name="username" value="myUser" />
<property name="password" value="myPassword" />
</bean >
… e di un altro bean che lo usi..

 <bean id="empDAO" class="refbeanexample.EmployeeDAO">
 <property name="dataSource">
 <ref local="dataSource"/>
 </property>
 </bean>

 Il bean sarà iniettato con la property “dataSource” dopo essere stato
 istanziato dal container e tramite il “setter” method.
D.I. tramite costruttore

<bean id="empDAO2" class="refbeanexample.EmployeeDAO">
<constructor-arg>
<ref local="dataSource"/>
</constructor-arg>
</bean>

Il risultato è il medesimo ma il bean è iniettato quando è
istanziato.
Constructor Argument type matching

   <bean id="exampleBean" class="examples.ExampleBean"
   >
   <constructor-arg type="int" value="7500000"/>
   <constructor-arg type="java.lang.String" value="42"/>
   </bean>
Constructor Argument index

<bean id="exampleBean" class="examples.
ExampleBean">
<constructor-arg index="0" value="7500000"/>
<constructor-arg index="1" value="42"/>
</bean>
Best practise

  E’ preferibile l’utilizzo di “setter injection”
  Alcune proprietà possono essere opzionali
  Il risultato sarà un xml più snello e
  controllabile
  Si evitano dipendenze circolari
  In alcuni casi, es. codice legacy, potrebbe
  essere opportuno o necessario l’uso di
  “constructor injection”
Property values

  Il valore di una property è fornito tramite una
  stringa leggibile.
  Spring effettua automaticamente la
  conversione nel tipo richiesto dalla property
  Esistono forme “contratte” per specificare i
  valori di java.util.Properties
Laboratorio

  Esempio bean-ref
  Esempio Costructor Inection
Una Enterprise Application tipica
  Web Tier


                Action               Action                   Action
                A                    B                        C

  Business Services


                                                                                    Service
                  Service                        Service
                                                                                    3
                  1                              2




  Data access                                 Domain model

                                                                       Class              Class
                                                 Class
                                                                       Attributes         Attributes
                         DAOs/                   Attributes
                         Repositor                                     attributes         attributes
                                                 attributes
                         y
Costruiamola con Spring

  Costruzione di POJO per il domain model
  Costruzione di DAO per Data Access
  Costruzione di Servizi
  Gestione delle transazioni
  Esempio utilizzo Hibernate
Laboratorio

  Applicazione gestione corsi
Aspect Oriented Programming

  Spring 2.0 (2006) e AspectJ 5 (2005)
  AOP è un approccio quindi una scelta per
  risolvere determinate problematiche
  Comunemente usato per la gestione delle
  transazioni in Spring grazie anche ad alcuni
  built-in beans
Spring AOP

      framework proxy-based
      Java + ‘weaver’
      Soluzione AOP più utilizzata
      Integrata con Spring container
      Limitato uso (execution) dei join points
      Sufficiente nel 90% dei casi
Weaving : linking aspects with other application types or objects to create an advised object. This can be done
at compile time (using the AspectJ compiler, for example), load time, or at runtime.

Spring AOP, like other pure Java AOP frameworks, performs weaving at runtime     .
L’unità base di un aspetto


       Aspect
       Attributes

       Behaviours
                           u
       WHERE (pointcuts)   s   acces
                           e   s

       WHAT (advice)
Pointcuts

  E’ un’espressione con una sintassi simile a
  Regular Expressions
  Spring NON valida l’espressione
  Definisce, in Spring, quando viene eseguito
  un metodo con una determinata signature
Join points (method execution)

  Un ‘method execution’ join point si verifica
  quando viene eseguito un metodo
  Le informazioni che possono essere usate
  per il join point:
     Nome del metodo
     Tipo parametro
     Tipo restituito
     Eccezione dichiarata
Advices

  Ogni dichiarazione di advice è associata con un
  pointcut expression
     Il codice dell’advice viene eseguito nel join point verificato
     dal pointcut expression
  Rispetto al join point, l’advice può essere eseguito:
     Before
     After
     After returning
     After throwing
     Around
Before advice

  “gira” prima di un join point verificato. Non
  può modificare i valori degli argomenti, non
  può influenzare il funzionamento del flusso
  logico se non lanciando una exception
After Advice

  “gira” dopo un join point verificato, non può
  modificare il valore di ritorno, né influenzare
  il flusso computazionale; tranne lanciando
  una exception.
After Returning advice

  “gira” dopo un ritorno eseguito da un join
  point verificato. Non può modificare il valore
  di ritorno e non può modificare il flusso
  computazionale, tranne lanciando una
  exception.
After throwing

  “gira” dopo aver lasciato un join point
  verificato da una condizione di exception.
  Non può influenzare il flusso ma può a sua
  volta lanciare una exception.
Around

 “gira” sia prima che dopo un join point
 verificato. Può determinare se, quando e
 come deve continuare il flusso
 computazionale, può cambiare gli
 argomenti, gli oggetti ed i valori di ritorno.
 Per motivi di performance utilizzarli solo
 quando non è possibile usare gli altri
Proxy system

  Le classi devono implementare un’interface
  Il file di configurazione deve contenere il tag:
     <aop:aspectj-autoproxy/>
  Attenzione all’uso del puntatore ‘this’
     Si riferisce al proxy
     Si riferisce all’advice
Ancora sul transaction manager

  La versione precedente di Spring (2.0)
  utilizzava un proxy per la gestione delle
  transazioni
  La versione attuale utilizza un advice bean
Potenzialità di AOP

  Possibilità di modellare, all’interno di un sistema:
     Transactions
     Security
     Remoting
     Tracing
     Profiling
     Failure handling
     Management
     Caching
     ….

Más contenido relacionado

La actualidad más candente

Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular jsRiccardo Cardin
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Antonio Musarra
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioAntonio Musarra
 
Struts - Overview, Installazione e Setup
Struts - Overview, Installazione e SetupStruts - Overview, Installazione e Setup
Struts - Overview, Installazione e SetupFederico Paparoni
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleLiferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleAntonio Musarra
 

La actualidad más candente (20)

Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular js
 
Microservices
MicroservicesMicroservices
Microservices
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
 
Java lezione 18
Java lezione 18Java lezione 18
Java lezione 18
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 
OSGi e Liferay 7
OSGi e Liferay 7OSGi e Liferay 7
OSGi e Liferay 7
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo Episodio
 
Struts - Overview, Installazione e Setup
Struts - Overview, Installazione e SetupStruts - Overview, Installazione e Setup
Struts - Overview, Installazione e Setup
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
SCBCD 1. generic ejb
SCBCD 1. generic ejbSCBCD 1. generic ejb
SCBCD 1. generic ejb
 
Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleLiferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 

Similar a Modulo 6 Spring Framework Core E Aop

Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)DotNetMarche
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Fabio Armani
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
Tesi Discussione
Tesi DiscussioneTesi Discussione
Tesi DiscussioneYeser Rema
 
Microservices architecture & Service Fabric
Microservices architecture & Service FabricMicroservices architecture & Service Fabric
Microservices architecture & Service FabricMassimo Bonanni
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)Sabino Labarile
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseAlberto Lagna
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5JBug Italy
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoJava User Group Roma
 
Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...
Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...
Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...Amazon Web Services
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
Quando SOA Incontra Enterprise 2.0
Quando SOA Incontra Enterprise 2.0Quando SOA Incontra Enterprise 2.0
Quando SOA Incontra Enterprise 2.0Technology Transfer
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Il mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveIl mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveEmanuele Della Valle
 

Similar a Modulo 6 Spring Framework Core E Aop (20)

Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Tesi Discussione
Tesi DiscussioneTesi Discussione
Tesi Discussione
 
Microservices architecture & Service Fabric
Microservices architecture & Service FabricMicroservices architecture & Service Fabric
Microservices architecture & Service Fabric
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterprise
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
 
MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
 
Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...
Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...
Viaggio attraverso il cloud - Consigli e best practices per iniziare con il c...
 
Scenario Framework
Scenario FrameworkScenario Framework
Scenario Framework
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Quando SOA Incontra Enterprise 2.0
Quando SOA Incontra Enterprise 2.0Quando SOA Incontra Enterprise 2.0
Quando SOA Incontra Enterprise 2.0
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Il mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveIl mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettive
 

Modulo 6 Spring Framework Core E Aop

  • 1. Spring Framework Core e AOP
  • 2. J2EE Applications Composte da più “blocchi” in collaborazione tra loro Utilizzano containers invasivi per la gestione di aspetti (transazioni,ecc.) Spesso non rispettano il principio “1:1” – design level requirements-implementation
  • 3. Le caratteristiche desiderabili DRY principle Modularity Information hiding Separation of Concerns
  • 4. DRY Principle Ogni sottosistema dovrebbe avere una rappresentazione singola, non ambigua, autoritativa.
  • 5. Modularity Un’unità in cui gli elementi strutturali sono strettamente legati tra loro e poco legati con le altre unità
  • 6. Information hiding Ogni modulo è caratterizzato dalla sua conoscenza della decisione di design che nasconde agli altri. La sua interfaccia o definizione è scelta per rivelare il meno possibile sul suo funzionamento.
  • 7. Separation of Concerns Significa focalizzare su una cosa alla volta
  • 8. Caratteristiche principali Lightweight container Strato di astrazione per transazioni Strato di astrazione JDBC Integrazione AOP Piena integrabilità con i frameworks più diffusi
  • 9. Spring lightweight container Configurazione centralizzata degli oggetti applicativi e dei loro collegamenti Non invasivo (le classi non devono implementare particolari interfaces o estendere classi del framework Assembla un sistema complesso a partire da componenti disaccoppiati (POJO)
  • 10. Astrazione per Transazioni Integra un transaction manager “preconfezionato” utilizzando le funzionalità AOP Demarca le transazioni a livello di configurazione senza dover gestire a codice le problematiche legate alla specificità del contesto.
  • 11. Strato di astrazione JDBC Uniforma la gestione delle transazioni Si integra con le più diffuse tecnologie ORM Classi di supporto (templates) DAO layer semplificato Riduzione possibilità errori
  • 12. Funzionalità AOP Approccio AOP integrato Supporto di una parte del progetto “AspectJ” Proxy-based system AOP full language support
  • 13. I moduli di Spring
  • 14. Il file spring-context <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> </beans> XML BASED Configuration Metadata Attenzione: l’import degli xsd deve essere eseguito in base alle funzionalità implementate
  • 15. Istanziare i beans In fase di startup i beans vengono pre-istanziati come singletons Gli eventuali errori vengono rilevati subito senza attendere un tempo indefinito In ogni caso i beans possono essere istanziati quando richiesto (lazy-init) Ciascun bean può essere configurato affinchè venga restituita una istanza (scope="prototype“)
  • 16. Definizione di un bean <bean id="dataSource" class="org.springframework.jdbc. datasource.DriverMana gerDataSource"> <property name="driverClassName“ value="com.mysql.jdbc. Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/corsi" /> <property name="username" value="myUser" /> <property name="password" value="myPassword" /> </bean >
  • 17. … e di un altro bean che lo usi.. <bean id="empDAO" class="refbeanexample.EmployeeDAO"> <property name="dataSource"> <ref local="dataSource"/> </property> </bean> Il bean sarà iniettato con la property “dataSource” dopo essere stato istanziato dal container e tramite il “setter” method.
  • 18. D.I. tramite costruttore <bean id="empDAO2" class="refbeanexample.EmployeeDAO"> <constructor-arg> <ref local="dataSource"/> </constructor-arg> </bean> Il risultato è il medesimo ma il bean è iniettato quando è istanziato.
  • 19. Constructor Argument type matching <bean id="exampleBean" class="examples.ExampleBean" > <constructor-arg type="int" value="7500000"/> <constructor-arg type="java.lang.String" value="42"/> </bean>
  • 20. Constructor Argument index <bean id="exampleBean" class="examples. ExampleBean"> <constructor-arg index="0" value="7500000"/> <constructor-arg index="1" value="42"/> </bean>
  • 21. Best practise E’ preferibile l’utilizzo di “setter injection” Alcune proprietà possono essere opzionali Il risultato sarà un xml più snello e controllabile Si evitano dipendenze circolari In alcuni casi, es. codice legacy, potrebbe essere opportuno o necessario l’uso di “constructor injection”
  • 22. Property values Il valore di una property è fornito tramite una stringa leggibile. Spring effettua automaticamente la conversione nel tipo richiesto dalla property Esistono forme “contratte” per specificare i valori di java.util.Properties
  • 23. Laboratorio Esempio bean-ref Esempio Costructor Inection
  • 24. Una Enterprise Application tipica Web Tier Action Action Action A B C Business Services Service Service Service 3 1 2 Data access Domain model Class Class Class Attributes Attributes DAOs/ Attributes Repositor attributes attributes attributes y
  • 25. Costruiamola con Spring Costruzione di POJO per il domain model Costruzione di DAO per Data Access Costruzione di Servizi Gestione delle transazioni Esempio utilizzo Hibernate
  • 26. Laboratorio Applicazione gestione corsi
  • 27. Aspect Oriented Programming Spring 2.0 (2006) e AspectJ 5 (2005) AOP è un approccio quindi una scelta per risolvere determinate problematiche Comunemente usato per la gestione delle transazioni in Spring grazie anche ad alcuni built-in beans
  • 28. Spring AOP framework proxy-based Java + ‘weaver’ Soluzione AOP più utilizzata Integrata con Spring container Limitato uso (execution) dei join points Sufficiente nel 90% dei casi Weaving : linking aspects with other application types or objects to create an advised object. This can be done at compile time (using the AspectJ compiler, for example), load time, or at runtime. Spring AOP, like other pure Java AOP frameworks, performs weaving at runtime .
  • 29. L’unità base di un aspetto Aspect Attributes Behaviours u WHERE (pointcuts) s acces e s WHAT (advice)
  • 30. Pointcuts E’ un’espressione con una sintassi simile a Regular Expressions Spring NON valida l’espressione Definisce, in Spring, quando viene eseguito un metodo con una determinata signature
  • 31. Join points (method execution) Un ‘method execution’ join point si verifica quando viene eseguito un metodo Le informazioni che possono essere usate per il join point: Nome del metodo Tipo parametro Tipo restituito Eccezione dichiarata
  • 32. Advices Ogni dichiarazione di advice è associata con un pointcut expression Il codice dell’advice viene eseguito nel join point verificato dal pointcut expression Rispetto al join point, l’advice può essere eseguito: Before After After returning After throwing Around
  • 33. Before advice “gira” prima di un join point verificato. Non può modificare i valori degli argomenti, non può influenzare il funzionamento del flusso logico se non lanciando una exception
  • 34. After Advice “gira” dopo un join point verificato, non può modificare il valore di ritorno, né influenzare il flusso computazionale; tranne lanciando una exception.
  • 35. After Returning advice “gira” dopo un ritorno eseguito da un join point verificato. Non può modificare il valore di ritorno e non può modificare il flusso computazionale, tranne lanciando una exception.
  • 36. After throwing “gira” dopo aver lasciato un join point verificato da una condizione di exception. Non può influenzare il flusso ma può a sua volta lanciare una exception.
  • 37. Around “gira” sia prima che dopo un join point verificato. Può determinare se, quando e come deve continuare il flusso computazionale, può cambiare gli argomenti, gli oggetti ed i valori di ritorno. Per motivi di performance utilizzarli solo quando non è possibile usare gli altri
  • 38. Proxy system Le classi devono implementare un’interface Il file di configurazione deve contenere il tag: <aop:aspectj-autoproxy/> Attenzione all’uso del puntatore ‘this’ Si riferisce al proxy Si riferisce all’advice
  • 39. Ancora sul transaction manager La versione precedente di Spring (2.0) utilizzava un proxy per la gestione delle transazioni La versione attuale utilizza un advice bean
  • 40. Potenzialità di AOP Possibilità di modellare, all’interno di un sistema: Transactions Security Remoting Tracing Profiling Failure handling Management Caching ….