SlideShare a Scribd company logo
1 of 82
Spring Framework
Introduzione
• Spring è un framework applicativo, open source, che ha l’obiettivo semplificare lo sviluppo di
applicazioni Java di tipo enterprise.
• Creato nel 2002 come approccio alternativo alla piattaforma Java EE per raggiungere scopi
analoghi con un modello di programmazione più semplice e più leggero.
• Il suo successo è stato tale da aver profondamente influenzalo l’evoluzione della specifica EJB.
• Oggi Spring è un framework modulare, in grado di supportare una varietà di necessità applicative:
come le applicazioni web, la sicurezza, i big data e il cloud.
1Ml download
VM-Ware
Pivotal
Struts
(2000)
Hibernate
(2001)
EJB3
(2000)
IoC Vs DI
• La caratteristica per la quale Spring è maggiormente riconosciuto è la
sua implementazione del pattern Dependency Injection che è uno
degli aspetti fondamentali dell’Inversion of Control (IoC).
• IoC: è un principio dell'ingegneria del software grazie al quale il
controllo di oggetti o porzioni di un programma viene trasferito a un
contenitore o framework. Può essere ottenuto in diversi modi:
Strategy design pattern, Service Locator pattern, Factory pattern, and
Dependency Injection (DI).
• DI: è una implementazione dell’IoC in cui il controllo invertito è
l’impostazione delle dipendenze di un oggetto.
Core Coponents
• Il modulo core è la componente fondamentale del framework ed
implementa la Dependency Injection;
• Il bean module fornisce le classi factory per l’istanziazione dei bean;
• Il modulo context, implementato al di sopra dei moduli core e bean,
fornisce l’accesso a tutti i bean definiti in funzione dei relativi contesti;
• Il modulo SpEL fornisce un expression language per la manipolazione
dei bean a runtime.
Approccio Tradizionale
Object A
Object B
Object C
Class B
Class C
• Per utilizzare l’oggetto B, l’oggetto A lo
deve istanziare dalla Classe B.
• Per utilizzare l’oggetto C, l’oggetto B lo
deve istanziare dalla Classe C.
Problemi e limitazioni
• Le classi sono fortemente accoppiate;
• Difficile da testare;
• Non favoriscono il riuso;
• Difficili da comprendere (il flusso principale è poco evidente);
• Difficile da manutenere;
• L’utilizzo delle interfacce non risolvono il problema ????
Nuovo Approccio
…
<beans>
<bean id=A class=A>
<property name=b>
<ref bean=B>
</property>
</bean>
<bean id=B class=B>
<property name=c>
<ref bean=C>
</property>
</bean>
<bean id=C class=C/>
</beans>
Class B{
private CGroup c;
…
Public void setCGroup(CGroup c){
this.c = c;
}
}
Class C
Class A{
private BGroup b;
…
Public void setBGroup(BGroup b){
this.b = b;
}
}
Interface BGroup
Class B’
Class B’’
Interface CGroup
Class C’
Class C’’
changes
Concetti
• Due forme di DI: Setter Injection e Constructor Injection;
• Disaccoppiamento del codice garantito dall’utilizzo delle interfacce;
• Spring IoC Container è la piattaforma mentre la bena factory produce
i bean;
Spring Bean factory
ClassPathXmlApplicationContext
XmlWebApplicationContext
web.xml
org.springframework.web.context.ContextLoaderListener
implements
javax.servlet.ServletContextListener
ContextLoaderListenerapplicationContext.xml
ServletContext
WebApplicationContext
Annotazioni
Stereotype Annotation
Context Configuration Annotation
JSR-330 -> @Inject
Spring Lifecycle
XML
InitializingBean
DisposableBean
JSR-250
Spring Framework
Gestione delle Transazioni
• Interfaccia che implementa la strategia di gestione delle transazioni:
Implementazioni Utilizzo
DataSourceTransactionManager Gestione di un singolo JDBC DataSource
JtaTransactionManager Utilizza un provider JTA fornito da Java EE
Container o configurato localmente
JpaTransactionManager Utilizza un JPA EntityManagerFactory
HibernateTransactionManager Utilizza un singolo Hibernate SessionFactory
DataSourceTransactionManager
JtaTransactionManager
HibernateTransactionManager
Declarative Transaction Definition
Approccio Basato sulle Annotazioni
<tx:annotation-driven transaction-manager="txManager"/>
Configurazione
ISOLATION LEVEL
TRANSACTION ATTRIBUTES
Spring MVC
Introduzione
• Spring MVC è una delle componenti più utilizzati, dopo Spring Core.
• Rispetto alla soluzione Java Server Faces, che ricordiamo è uno standard J2EE,
Spring MVC è molto più simile alla tecnologia Servlet.
• La principale critica rivolta alle specifica JSF, infatti, è che introduce una eccessiva
astrazione nascondendo concetti di base che è bene conoscere.
DispatcherServlet
• Analoga alla FacesServlet di JSF e ActionServlet di Struts;
ContextLoaderListener vs DispatcherServlet
• Spring può gestire più contesti contemporaneamente,
un root context ed uno o più child context.
• ContextLoaderListener crea il root context
dell’applicazione.
• DispatcherServlet crea i child context per ogni
servlet entry.
• Child context possono accedere ai bean definiti nel
root context.
• Bean nel root context non possono accedere
“direttamente” ai bean nel child context.
• Tutti i contesti sono inseriti nel ServletContext.
• La classe WebApplicationContextUtils
permette l’accesso ai root context.
Definizione del Contesto
<context:component-scan>
@Component
@Repository
@Service
@Controller
<mvc:annotation-driven/>
@Controller
@RequestMapping
@Valid
@RequestBody
@ResponseBody
<context:annotation-config>
@Autowired
@Qualifier
(es. serializzazione degli oggetti in XML con
JAXB)
Login Servlet
login.jsp LoginServlet
Login Controller
login.jsp LoginController
@RequestHeader, @CookieValue, @RequestBody, …
View Resolver
Le jsp sono nella cartella WEB-INF
e quindi accessibili
esclusivamente tramite servlet.
Approfondimenti
Path Variable
Parametri della Request
Approfondimenti
Parametri nell’Header
Accesso ai Cookie
Approfondimenti
Request Body
Spring Security
Introduzione
• Consente di gestire in modo semplice e trasparente l’autenticazione
(ovvero chi sei) e la profilazione (ovvero cosa sei autorizzato a fare)
degli utenti che accedono ad una applicazione web.
• Implementa funzionalità che fanno fronte alle principali vulnerabilità
(OWASP):
• Cross-site request forgery (CSRF);
• Session Fixation;
• Attacco XSS;
• Etc.
DelegatingFilterProxy
Reserved Name
ContextLoaderListener
spring-security.xml
Abilita la web security
Definisce il servizio di autenticazione
Password encoder
Authentication Provider
Custom Provider bcrypt: funzione
hashing basata
sulla cifratura
Blowfish.
Mai restituire null.
Più metodi di
autenticazione
Ruoli e Privilegi
Database Provider
JdbcDaoImpl
UserDetailsService
1
2
alternativi
Ruoli e Privilegi
Filtro sulle URI
Filtro sulle componenti della VIEW
Ruoli e Privilegi
Spring JavaConfig
Introduzione
• Rispetto J2EE in cui la DI è gestita solamente tramite annotation con
l’XML Spring mantiene separata la configurazione piuttosto che
diffonderla nel codice.
• L’utilizzo dell’XML comporta però diverse conseguenze:
• Non è type-safe e un qualsiasi errore nel file è rilevato esclusivamente allo
startup del contesto di Spring.
• L’XML è verboso al punto da divenire molto grandi in applicazioni
mediamente complesse, per cui si è costretti a suddividere la configurazione
in più file.
• Non è possibile navigare nei vari file di configurazione e per trovare dove un
bean è definito è necessario eseguire una ricerca full-text.
Configurazione
Indica al container che
la classe contiene
elementi di
configurazione.
Vengono eseguiti ed il
risultato inserito nel
contesto (<bean>).
ApplicationContext
testBean
bean1
bean2
Risolve l’ambiguità nel
recupero di un bean di
tipo TestBean.
JavaConfig
AnnotationConfigApplicationContext
Bean Scope
Standard: singleton e prototype
Spring MVC: request e session
Modularizzazione
• Una best practice abbastanza comune è quella di suddividere la
configurazione in diversi classi: es. una per i servizi ed una per i DAO.
1
2
I bean registrati un una
classe di configurazione
diverse possono essere
importati un un’altra
classe semplicemente
utilizzando l’autowiring.
Gestione dei Profili
ProfiledBean
<interface>
ProfiledBeanA ProfiledBeanB
Registrazione del profilo
web.xml
Java main()
JavaConfig vs SpringMVC
<mvc:annotation-driven />
JavaConfig vs SpringMVC
• Sostituisce la definizione della DispatcherServlet sul file web.xml
(Servlet 3.0)
JavaConfig vs Spring Security
Spring Data
(cenni)
Introduzione
• Il suo scopo è di unificare e semplificare l’accesso a differenti tipi di
basi di dati, sia relazionali che non (NoSQL).
• DAO vs Repository.
• Supporta la specifica JPA (quindi tutti gli ORM che la implementano).
• Le entità sono dei POJO annotati con @Entity che hanno un solo
identificativo @Id.
• Il concetto principale del framework è la marker interface Repository:
1 2
Gerarchia
Domain Class
(es. Utente)
ID type della
domain class
public interface UserRepository extends CrudRepository<User, Long>
Fornisce funzionalità CRUD
es: save(), delete(), find(), etc.
Aggiunge metodi di paginazione
Page<T> findAll(Pageable pageable);
JPA specific extension
Query
• Le query possono essere “derivate” in base al nome del metodo
find…By…, read…By…, query…By…, count…By…, get…By…
Nome dell’entità eventualmente preceduta
da Distinct , Top, First:
- findUserBy…
- findDistinctUserBy…
- queryFirst10By…
- findTop3By…
Elenco delle proprietà con diversi qualificatori:
- findUserByLastnameOrFirstname
- findUserByLastnameAndFirstname
- findUserByLastnameIgnoreCase
- finduserByLastnameAndFirstnameAllIgnoreCase
Property traversal:
Named Query
• Binding della query utilizzando l’annotazione JPA @Query
Query JPQL o Native
Query By Example
• Consente di generare query a partire da un “esempio” …
Spring Batch
(cenni)
Introduzione
• E’ un framework per l’elaborazione batch di grandi volumi di dati.
• Sorgenti differenti: database, flat file (xml, csv, etc.), code JMS, JPA, etc.
• Gestione automatica dei retry e failure.
• Tracciamento della stato di esecuzione dei batch.
• Supporto a differenti modalità di avvio dei job: script; http, etc.
• Scomposizione di grandi quantità di dati e processamento parallelo.
Componenti
Componente
responsabile
dello start dei
job
Componente responsabile della
conservazione delle
informazioni di esecuzione. Il
repository può essere in-
memory o su DB dedicato
La descrizione
del processo che deve
essere eseguito
Ogni step consiste di
tre attività:
- Data reading.
- Data processing.
- Data writing.
Componenti
Job
Job istanziato sui
parametri di avvio Parametri su cui è
avviato il Job
Contiene informazioni sull’esecuzione del
Job:
- stato,
- data ed ora di avvio e completamento,
- eventuale eccezione,
- etc.
La singola esecuzione di uno step che
contiene tutte le informazioni di
esecuzione:
- stato,
- data ed ora di avvio e completamento,
- numero di letture,
- scritture e commit,
Elaborazione
• Elaborazione a chunk (blocchi).
• I dati vengono letti e processati a blocchi utilizzando l’ItemReader e
l’ItemProcessor.
• Solamente quando è raggiunto l’intervallo di commit richiesto, l’intero
blocco è passato all’ItemWriter.
ItemReader
Interfaccia per lettura su
input generico
ItemProcessor
Dato un oggetto lo
trasforma in qualcosa di
altro.
ItemWriter
Interfaccia per scrittura su
output generico
Definizione XML del Job
Esecuzione
Schedulazione
• Per la schedulazione dei job è necessario integrare un tool che si
occupa dell’avvio temporizzato dei batch: TaskScheduler di Spring e il
più noto Quartz.
Spring Boot
(cenni)
Introduzione
• Spring Boot è una soluzione per realizzare in modo semplice
applicazioni su piattaforma Spring, producendo stand-alone App
eseguibili in java.
• Includono Tomcat, Jetty o Undertow (no WAR but JAR).
• Configurazione completa con Spring JavaConfig (no XML).
• Focalizzato sui Microservizi.
• Spring Inizializer: https://start.spring.io
Esposizione di un Microservizio
@Controller
@ResponseBody
Consumo di un Microservizio
Tipo restituito
Spring Integration
(cenni)
Introduzione
• Spring Integration è una architettura di
messaggistica che fornisce una
implementazione dei pattern EIP, mettendo
a disposizione una serie di componenti che
possono essere combinati per realizzare
un’applicazione EAI.
• Enterprise Application Integration (EAI) si
riferisca da un software o ad una
architettura software in grado di integrare
applicazioni enterprise eterogenee.
Componenti Principali
1. Producer (sender) ed i consumer (receiver) detti endpoint che si scambiano
messaggi;
2. Pipe dette anche channel che rappresentano i canali di comunicazione tra
producer e consumer;
3. Messaggi che trasportano l’informazione scambiata.
Riferimenti
http://www.javaboss.it/primi-passi-spring-core/
http://www.javaboss.it/spring-lifecycle/
http://www.javaboss.it/primi-passi-spring-batch/
http://www.javaboss.it/primi-passi-spring-boot/
http://www.javaboss.it/spring-javaconfig-parte-1/
http://www.javaboss.it/spring-integration-parte-1/
http://www.javaboss.it/primi-passi-con-spring-mvc-parte-1/
http://www.javaboss.it/spring-security-parte-1/
http://www.javaboss.it/invocazione-di-servizi-restful-con-resttemplate/
PayPal 4 Dummies
PayPal 4 Dummies
• BASE
• Interfaccia di Login e Registrazione dei propri dati carta
• Servizio REST di pagamento
• Batch di rendicontazione
• AVANZATO
• Integrare servizio bancario di pagamento

More Related Content

What's hot

Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Edureka!
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Noa Harel
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
 
Single Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJSSingle Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJSM R Rony
 
How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17Johan Janssen
 
Gerrit: how to cook a plugin in only 10 mins
Gerrit: how to cook a plugin in only 10 minsGerrit: how to cook a plugin in only 10 mins
Gerrit: how to cook a plugin in only 10 minsLuca Milanesio
 
Introduction to VueJS & Vuex
Introduction to VueJS & VuexIntroduction to VueJS & Vuex
Introduction to VueJS & VuexBernd Alter
 
Introduction to Git and Github
Introduction to Git and Github Introduction to Git and Github
Introduction to Git and Github Max Claus Nunes
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeTeerapat Khunpech
 
Microsoft SQL server 2017 Level 300 technical deck
Microsoft SQL server 2017 Level 300 technical deckMicrosoft SQL server 2017 Level 300 technical deck
Microsoft SQL server 2017 Level 300 technical deckGeorge Walters
 
Angular & RXJS: examples and use cases
Angular & RXJS: examples and use casesAngular & RXJS: examples and use cases
Angular & RXJS: examples and use casesFabio Biondi
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaAndrea Della Corte
 
Introduction to java Jasper Report with Server & iReport
Introduction to java Jasper Report with Server & iReportIntroduction to java Jasper Report with Server & iReport
Introduction to java Jasper Report with Server & iReportArif Hosain
 
The Art of Metaprogramming in Java
The Art of Metaprogramming in Java  The Art of Metaprogramming in Java
The Art of Metaprogramming in Java Abdelmonaim Remani
 
NGINX Kubernetes Ingress Controller: Getting Started – EMEA
NGINX Kubernetes Ingress Controller: Getting Started – EMEANGINX Kubernetes Ingress Controller: Getting Started – EMEA
NGINX Kubernetes Ingress Controller: Getting Started – EMEAAine Long
 

What's hot (20)

Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
 
Spring & hibernate
Spring & hibernateSpring & hibernate
Spring & hibernate
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Single Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJSSingle Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJS
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17
 
Vuex
VuexVuex
Vuex
 
Gerrit: how to cook a plugin in only 10 mins
Gerrit: how to cook a plugin in only 10 minsGerrit: how to cook a plugin in only 10 mins
Gerrit: how to cook a plugin in only 10 mins
 
Introduction to VueJS & Vuex
Introduction to VueJS & VuexIntroduction to VueJS & Vuex
Introduction to VueJS & Vuex
 
Introduction to Git and Github
Introduction to Git and Github Introduction to Git and Github
Introduction to Git and Github
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTree
 
Microsoft SQL server 2017 Level 300 technical deck
Microsoft SQL server 2017 Level 300 technical deckMicrosoft SQL server 2017 Level 300 technical deck
Microsoft SQL server 2017 Level 300 technical deck
 
Angular & RXJS: examples and use cases
Angular & RXJS: examples and use casesAngular & RXJS: examples and use cases
Angular & RXJS: examples and use cases
 
Gradle
GradleGradle
Gradle
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Asp.net mvc 5 ppt
Asp.net mvc 5 pptAsp.net mvc 5 ppt
Asp.net mvc 5 ppt
 
Introduction to java Jasper Report with Server & iReport
Introduction to java Jasper Report with Server & iReportIntroduction to java Jasper Report with Server & iReport
Introduction to java Jasper Report with Server & iReport
 
The Art of Metaprogramming in Java
The Art of Metaprogramming in Java  The Art of Metaprogramming in Java
The Art of Metaprogramming in Java
 
NGINX Kubernetes Ingress Controller: Getting Started – EMEA
NGINX Kubernetes Ingress Controller: Getting Started – EMEANGINX Kubernetes Ingress Controller: Getting Started – EMEA
NGINX Kubernetes Ingress Controller: Getting Started – EMEA
 

Similar to Spring - Ecosistema

Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Mauro Servienti
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
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
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Gian Maria Ricci
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aopjdksrl
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10gPaolo Campegiani
 
Tesi Discussione
Tesi DiscussioneTesi Discussione
Tesi DiscussioneYeser Rema
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1massimiliano.wosz
 

Similar to Spring - Ecosistema (20)

MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
 
SCBCD 1. generic ejb
SCBCD 1. generic ejbSCBCD 1. generic ejb
SCBCD 1. generic ejb
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
Spring 2.5
Spring 2.5Spring 2.5
Spring 2.5
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Microservices
MicroservicesMicroservices
Microservices
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aop
 
ASP.NET MVC: Full Throttle
ASP.NET MVC: Full ThrottleASP.NET MVC: Full Throttle
ASP.NET MVC: Full Throttle
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10g
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Tesi Discussione
Tesi DiscussioneTesi Discussione
Tesi Discussione
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1
 

Spring - Ecosistema

Editor's Notes

  1. Entrambi gli approcci quindi hanno vantaggi e svantaggi, però riportare la configurazione nel codice ha diverse implicazioni interessanti: Tutti gli IDE supportano il type-checking, il code completion, il refactoring e la ricerca delle referenze nel codice. Per uno sviluppatore java è molto più semplice codificare concetti come: creazione di bean, inizializzazione, etc. in java piuttosto che con inventare metodi complicati in XML. l’uso di design pattern specifici possono rendere il codice (di configurazione) chiaro e leggibile. JavaConfig si candida quindi come una valida alternativa sia all’uso dell’XML che all’autowiring. Esso infatti unisce il vantaggio del disaccoppiamento dell’XML con il compile-time check di Java. In un certo senso JavaConfig può essere visto come l’equivalente di un file XML ma codificato in linguaggio Java.