1. Spring 3.0
Gildas Cuisinier
vendredi 19 février 2010
2. Gildas Cuisinier
Consultant Java depuis 3 ans
Gam Consult Luxembourg
Certifié Spring
Responsable Spring @
Developpez.com
Article, FAQ, Forum, Compte rendu
Relecteur technique
2
vendredi 19 février 2010
3. Agenda
Retrospective
Spring 3.0
Spring et JEE 6
3
vendredi 19 février 2010
5. Avant Spring
EJB 2
Modèle complexe
Difficile à tester
5
vendredi 19 février 2010
6. Spring 1.0
Mars 2004
Fonctionnalités
Inversion du contrôle
Programmation Orienté Aspect (AOP)
Support de Jdbc, Hibernate, JDO
Framework Web
6
vendredi 19 février 2010
7. Instanciation
Dépendance directe
Difficile à tester
7
vendredi 19 février 2010
9. IoC : Injection de dépendances
Injecte InstanceB
Instancie
Instancie
9
vendredi 19 février 2010 Instancie
10. IoC : Avantages
POJO
Dépendance uniquement sur les
contrats
Plus simple à tester
10
vendredi 19 février 2010
11. Spring 1.0
Configuration xml, basée sur une
DTD
Un seul tag : <bean>
Possibilité de métadonnées sur les
classes
Basé sur Xdoclet
vendredi 19 février 2010
12. Spring 1.2
Mai 2005
Toujours basé sur une DTD
Alias, import
Premier support du JDK 5 !
@Transactional, …
vendredi 19 février 2010
13. Spring 2.0
Octobre 2006
Simplification de la configuration
XML
Basé sur XML Schema
Namespaces dédiés
JEE, Transaction, AOP, Lang, Util
Scope
Annotations AspectJ
13
vendredi 19 février 2010
14. Spring 2.5
Novembre 2007
Nouveaux namespaces :
JMS
Context
Annotations
Spring : IoC, Tests, Web
Standard JEE
Toujours compatible JDK 1.4
14
vendredi 19 février 2010
16. Spring 3.0
Supports, dépréciations et
suppressions
Nouveautés de Spring 3
Rest, Expression Languages, namespaces
Spring 3.1
16
vendredi 19 février 2010
17. Java 5 - ApplicationContext
<T> T getBean(Class<T> requiredType) throws
BeansException;
Pas de casting
SpeakerRepository repository =
context.getBean(SpeakerRepository.class);
17
vendredi 19 février 2010
18. Java 5 - RowMapper
private class SpeakerMapper implements RowMapper<Speaker> {
public Speaker mapRow(ResultSet rs, int rowNum) throws
SQLException {
return SpeakerBuilder.SpeakerWith()
.id(rs.getInt(1))
.firstName( rs.getString(2))
.lastName(rs.getString(3))
.email(rs.getString(4))
.birthday(rs.getDate(5))
.build();
}
}
18
vendredi 19 février 2010
19. Java 5 - Varargs
Avant
public Integer saveOld(Speaker speaker) {
return template.update("insert into speakers values
(null, ?,?,?,?)",
new Object[]{speaker.getFirstName(),
speaker.getLastName(),
speaker.getEmail(),
speaker.getBirthday()});
}
Spring 3
public Integer save(Speaker speaker) {
return template.update("insert into speakers values
(null, ?,?,?,?)",
speaker.getFirstName(),
speaker.getLastName(),
speaker.getEmail(),
speaker.getBirthday());
} 19
vendredi 19 février 2010
20. Supports
JDK 1.5+
Rupture : JDK 1.4 n’est plus supporté
Dépréciation
Hiérarchie de contrôleur Web
Hiérarchie de classe pour Junit 3.8
Le support de Struts 1.0
Suppression
Le support de Commons Attributes
Le support de Toplink 20
vendredi 19 février 2010
22. Spring OXM
Inclusion du module de mapping
Object / XML
Provient de Spring WS
Permet une abstraction des API
communes
JAXB, JiBX, Xstream, Castor
Unification des exceptions
Utilisation
Gestion des payload REST en XML
22
vendredi 19 février 2010
23. JavaConfig
Configuration par annotations
@Configuration, @Bean, @Lazy, @Primary, @Import,
@Value
Version XML :
<beans>
<bean name=“monBean"
class=“be.hikage.MonBeanImpl"/>
</beans>
Version Annotation:
@Configuration
public class AppConfig { 23
vendredi 19 février 2010
24. Version Annotation
@Configuration
public class AppConfig {
@Bean
public MonBean monBean() { return new
MonBeanImpl(); }
}
24
vendredi 19 février 2010
25. Expression Language
Syntaxe proche des Unified EL mais
avec des fonctionnalités
supplémentaires
Développé selon les besoins des
projets du portfolio
Indépendant
25
vendredi 19 février 2010
26. EL : Synthaxe
Syntaxe Type
objet.propriete Appel des getters/setter
chaine.subString(2,3) Appel d’une méthode
array[2] Accès tableau par index
list[2] Accès liste par index
map[‘clé’] Map
26
vendredi 19 février 2010
27. EL : Synthaxe
Syntaxe Type
2 == 2 Opérateur
2 == 2 and 3 == 4 (faux)
Opérateur logique
2 == 1 or 4 ==4 (vrai)
5.00' matches '^-?d+(.d{2})?$' Regex
prenom ?:‘inconu’ Opérateur elvis
objet?.propriete?.proprieteFils Safe navigation
27
vendredi 19 février 2010
28. Expression Language
Attributs du contexte
systemProperties, systemEnvironnent
Beans
Web :
contextParameters, contextAttributes
request, session
28
vendredi 19 février 2010
29. EL : A venir
Utilisation dans les projets du
portfolio
Exemple : Spring Security
<http use-expressions="true">
<intercept-url pattern="/secure/**"
access="hasRole('ROLE_SUPERVISOR') and hasIpAddress
('192.168.1.0/24')" />
...
</http>
29
vendredi 19 février 2010
30. Spring MVC
Namespace de configuration
Support de REST
Nouvelles vues : Xml, Json, RSS
Mécanisme de sélection de la vue selon la requête
API client
30
vendredi 19 février 2010
31. REST
Intégré dans Spring @MVC
Fournir un support natif
Application visuelle Web
Service
Alternative : Utiliser JAX-RS et son
modèle propre
31
vendredi 19 février 2010
33. REST – Limitation HTML
REST : Utilisation les méthodes
HTTP :
GET,POST,PUT,DELETE
HTML ne gère que GET / POST
Solution : HiddenHttpMethodFilter
Taglib Spring MVC utilise cette solution
33
vendredi 19 février 2010
34. REST – Content Negociation
URL = Resource
Plusieurs représentations possibles
Solution :
ContentNegotiatingViewResolver
Délègue aux autres ViewResolver
Sélectionne celui qui correspond à la demande
34
vendredi 19 février 2010
35. REST - Client
RestTemplate
API de haut niveau pour REST
Accès au méthodes GET, PUT, POST, DELETE, OPTIONS
Gestion des conversions des objets
‣ HttpMessageConverter
Reste extensible par utilisation de CallBack
‣ Génération de la requête
‣ Traduction de la réponse
35
vendredi 19 février 2010
36. Support du scheduling
Avant :
Configuration verbeuse en XML
Définition du Scheduler
Définition du Trigger
Définition du Job
Définition du Bean « métier »
Après :
36
vendredi 19 février 2010
37. Support du scheduling
Alternative : Annotation
Cron
Delai fixe
Période fixe
37
vendredi 19 février 2010
38. Support appel asynchrone
Permet de rendre asynchrone
l’appel d’une méthode
Annotation @Asyn
Délègue l’appel à un TaskExecutor
38
vendredi 19 février 2010
39. Support appel asynchrone
Cas 1 : Méthode sans résultat
Cas 2 : Méthode avec résultat
39
vendredi 19 février 2010
40. Support des DB embarquées
Namespace jdbc
Permet de configurer des bases embarquées
Derby
H2
HSQLDB
Permet de configurer des scripts d’initialisation
40
vendredi 19 février 2010
41. Support Bean Validation
JSR 303 – Bean Validation
Standardisation de Hibernate Validator
Permet de configurer les contraintes de validation
directement sur les objets métiers
41
vendredi 19 février 2010
42. Support Bean Validation
Spring possède son propre système
de validation
org.springframework.validation.Validator
Propose un adapteur
LocalValidatorFactoryBean
Toutes couches
Validation manuelle via injection du validateur 42
vendredi 19 février 2010
43. Support JSR 330 - @Inject
JSR initiée par SpringSource et
Google
Propose un jeu d’annotations propre
@Inject ↔ @AutoWired mais limité
@Qualifier ↔ @Qualifier mais limité
@Named ↔ @Qualifier sur le nom du Bean
@Singleton
@Scope
43
vendredi 19 février 2010
45. Spring 3.X Roadmap
Spring 3.1 : Début 2010
Support complet de JEE 6
Support des conversations
45
vendredi 19 février 2010
46. Conclusion
Spring 3.0
Release majeure car rupture du JDK 1.4
Nouvelles fonctionnalités intéressantes
REST
SpEL
Bean Validation
Pas une révolution pour autant
46
vendredi 19 février 2010