Les premiers pas
Spring simplifie la création d'applications Java d'entreprise. Il fournit tout le nécessaire pour utiliser Java en environnement d'entreprise, avec la prise en charge de Groovy et Kotlin comme langages alternatifs sur la JVM, et la flexibilité requise pour créer de nombreuses architectures en fonction des besoins de l'application. Depuis la version 6.0, Spring requiert Java 17 ou une version ultérieure.
Spring prend en charge un large éventail de scénarios d'application. Dans les grandes entreprises, les applications sont souvent déployées sur le long terme et doivent s'exécuter sur un JDK et un serveur d'applications dont le cycle de mise à jour échappe au contrôle du développeur. D'autres applications peuvent s'exécuter sous la forme d'un seul fichier JAR avec le serveur intégré, éventuellement dans un environnement infonuagique. D'autres encore sont des applications autonomes (comme les applications de traitement par lots ou d'intégration) qui ne nécessitent pas de serveur.
Spring est un logiciel libre. Il bénéficie d'une communauté importante et active fournissant des retours d'expérience continus basés sur une grande variété de cas d'utilisation concrets. C'est ce qui a permis à Spring d'évoluer avec succès au fil des ans.
Que signifie «Spring» ?
Le terme «Spring» peut avoir différentes significations selon le contexte. Il peut désigner le projet Spring Framework lui-même, à l'origine de tout. Au fil du temps, d'autres projets Spring ont été construits sur la base de Spring Framework. Le plus souvent, lorsqu'on parle de «Spring», on fait référence à l'ensemble des projets associés.
Spring Framework est divisé en modules. Les applications peuvent choisir les modules dont elles ont besoin. Au cour du système se trouvent les modules du conteneur principal, qui incluent un modèle de configuration et un mécanisme d'injection de dépendances. De plus, Spring Framework fournit une base solide pour différentes architectures d'applications, notamment la messagerie, les données transactionnelles et la persistance, ainsi que le web. Il inclut également le cadre d'application Web Spring MVC basé sur les servlets et, en parallèle, le cadre d'application Web réactif Spring WebFlux.
Remarque concernant les modules : les fichiers JAR de Spring Framework permettent un déploiement dans le chemin des modules (Java Module System). Pour les applications modulaires, les fichiers JAR du cadre d'application Spring incluent des entrées de manifeste Automatic-Module-Name définissant des noms de modules stables au niveau du langage (spring.core, spring.context,...), indépendamment des noms des artefacts JAR. Ces fichiers JAR suivent la même convention de nommage, avec un tiret (-) au lieu d'un point (.) : par exemple, spring-core et spring-context. Bien entendu, les fichiers JAR du framework Spring fonctionnent également sans problème dans le classpath.
Historique de Spring et du cadre d'application Spring
Spring a vu le jour en 2003 pour pallier la complexité des premières spécifications J2EE. Si certains considèrent Java EE et son successeur actuel, Jakarta EE, comme concurrents de Spring, ils sont en réalité complémentaires. Le modèle de programmation Spring n'adopte pas la spécification de la plateforme Jakarta EE; il s'intègre plutôt à des spécifications individuelles soigneusement sélectionnées issues de l'écosystème Java EE traditionnel :
- Servlet API (JSR 340)
- WebSocket API (JSR 356)
- Concurrency Utilities (JSR 236)
- JSON Binding API (JSR 367)
- Bean Validation (JSR 303)
- JPA (JSR 338)
- JMS (JSR 914)
- ainsi que les configurations JTA/JCA pour la coordination des transactions, si nécessaire.
Le cadre d'application Spring prend également en charge l'injection de dépendances (JSR 330) et les annotations communes (JSR 250), que les développeurs d'applications peuvent choisir d'utiliser à la place des mécanismes spécifiques à Spring fournis par le cadre d'application. À l'origine, ces mécanismes reposaient sur les paquets javax.
Depuis la version 6.0, Spring a été mis à niveau vers Jakarta EE 9 (par exemple, Servlet 5.0+, JPA 3.0+), en utilisant l'espace de noms Jakarta au lieu des paquets javax traditionnels. Avec EE 9 comme version minimale requise et EE 10 déjà pris en charge, Spring est prêt à offrir une prise en charge native des évolutions futures des API Jakarta EE. Spring Framework 6.0 est entièrement compatible avec Tomcat 10.1 et Jetty 11 comme serveurs web, ainsi qu'avec Hibernate ORM 6.1.
Au fil du temps, le rôle de Java/Jakarta EE dans le développement d'applications a évolué. Aux débuts de J2EE et de Spring, les applications étaient conçues pour être déployées sur un serveur d'applications. Aujourd'hui, grâce à Spring Boot, elles sont développées selon les principes du DevOps et adaptées au infonuagique, avec un conteneur de servlets intégré et facile à modifier. Depuis Spring Framework 5, une application WebFlux n'utilise même plus directement l'API Servlet et peut s'exécuter sur des serveurs (comme Netty) qui ne sont pas des conteneurs de servlets.
Spring continue d'innover et d'évoluer. Outre le cadre d'application Spring, il existe d'autres projets, tels que Spring Boot, Spring Security, Spring Data, Spring Cloud et Spring Batch. Il est important de noter que chaque projet possède son propre dépôt de code source, son système de suivi des problèmes et son propre calendrier de publication.
Philosophie de conception
Lorsque vous découvrez un cadre d'application, il est important de comprendre non seulement ses fonctionnalités, mais aussi ses principes directeurs. Voici les principes directeurs du cadre d'application Spring :
- Offrir du choix à tous les niveaux. Spring vous permet de reporter les décisions de conception aussi tard que possible. Par exemple, vous pouvez changer de fournisseur de persistance via la configuration sans modifier votre code. Il en va de même pour de nombreux autres aspects de l'infrastructure et l'intégration avec des API tierces.
- Prendre en compte la diversité des points de vue. Spring privilégie la flexibilité et ne s'en tient pas à une approche prédéfinie. Il prend en charge un large éventail de besoins applicatifs, quelles que soient les perspectives.
- Maintenir une forte rétrocompatibilité. L'évolution de Spring a été soigneusement gérée afin de limiter les changements incompatibles entre les versions. Spring prend en charge une sélection rigoureuse de versions de JDK et de bibliothèques tierces pour faciliter la maintenance des applications et des bibliothèques qui en dépendent.
- Accorder une grande importance à la conception des API. L'équipe Spring investit beaucoup de réflexion et de temps dans la création d'API intuitives et robustes, capables de résister à de nombreuses versions et années d'utilisation.
- Exiger des normes élevées en matière de qualité du code. Le cadre d'application Spring accorde une grande importance à une Javadoc pertinente, à jour et précise. Il fait partie des rares projets pouvant se targuer d'une structure de code propre, sans dépendances circulaires entre les paquets.
Commentaires et contributions
Pour toute question pratique, diagnostic ou débogage, il est recommandez d'utiliser Stack Overflow. Si vous êtes presque certain(e) qu'il existe un problème dans le cadre d'application Spring ou si vous souhaitez suggérer une fonctionnalité, veuillez utiliser les Issues de GitHub.
Créer une application
Si vous débutez avec Spring, vous pouvez commencer par créer une application basée sur Spring Boot. Spring Boot offre une méthode rapide (et prescriptive) pour créer une application Spring prête pour la production. Basé sur le cadre d'application Spring, il privilégie les conventions à la configuration et est conçu pour vous permettre de démarrer rapidement.
Vous pouvez utiliser start.spring.io pour générer un projet de base ou suivre l'un des guides de démarrage, comme «Créer un service web RESTful». Plus faciles à assimiler, ces guides sont très axés sur les tâches et la plupart sont basés sur Spring Boot. Ils abordent également d'autres projets du catalogue Spring qui pourraient vous être utiles pour résoudre un problème spécifique.