Spring : le framework pour les applications Java complexes

En 2002, le développeur australien Rod Johnson présenta dans son livre Expert One-on-One J2EE Design and Development le code du framework Java Interface21, qu’il avait spécialement écrit pour une utilisation au sein de son propre projet. A partir de ce code, il décida ensuite de développer avec l’aide d’autres programmateurs le framework Spring, qui fut publié pour la première fois en juin 2003 sous la licence libre Apache 2.0 sur SourceForge, et qui compte aujourd’hui parmi les solutions phares des programmateurs pour le développement d’applications Enterprise Java. Ce framework open-source contourne les faiblesses et les limites de l’environnement de développement standard J2EE (aujourd’hui également connu sous le nom « Java Plattform ») et le modèle composants Enterprise JavaBeans (EJB), ce qui réduit considérablement sa complexité.

Qu’est-ce que Spring?

Spring simplifie le développement des applications Java, peu importe s’il s’agit d’une utilisation Web ou offline. Les grands avantages du framework résident en son code source très épuré et un temps d’adaptation minime. Pour pouvoir offrir ce confort au développeur, Spring se base sur les principes ci-dessous, que Rod Johnson explique dans son livre :

  • L’injection de dépendance (DI pour Dependency Injection) : par cette expression, on entend en programmation orientée objet une instance externe, qui réglemente à l’avance les dépendances des objets. Spring utilise à cette fin le composant Javabeans. Celui-ci se base dans Java entre autres comme conteneur pour la transmission des données, et sert donc de modèle pour les ressources gérées (« beans »). De cette manière, Spring peut agir en tant que conteneur, qui met à disposition au projet Java des classes préconfigurées ainsi que ses dépendances.
  • Programmation orientée aspect (AOP) : pour augmenter la modularité des applications orientées objet, Spring propose en option une approche de programmation orientée aspect avec la langue AspectJ. Ainsi, les aspects (rapports de composants inévitables dans les systèmes complexes) peuvent être structurés syntaxiquement. Ceci possède l’avantage que le code de programmation réel soit séparé des opérations techniques comme le traitement des erreurs, la validation ou la sécurité.
  • Templates: le terme se réfère pour Spring à des classes pour des interfaces de programmation diverses, qui facilitent le travail avec les APIs, et permet la gestion de ressources automatiques, le traitement d’erreurs et autres aides.

Afin que les principes nommés ci-dessus puissent être respectés, le framework Spring permet pour le développement d’application Java Enterprise de se tourner vers Plain Old Java Objects, raccourci POJO. Ces derniers sont, à la différence du contre-projet Enterprise JavaBeans (EJBs), opérationnels dans presque tous les environnements et ne nécessitent donc pas de serveur d’application spécifique qui soutiendrait le conteneur EJB. Des solutions standard comme Tomcat suffisent amplement. Pour pouvoir utiliser Spring, vous aurez de plus besoin du kit de développement Java SE Development Kit (SDK).

Spring : introduction des modules importants

Pour les applications diverses de Java, Spring se démarque particulièrement tout d’abord grâce à la construction modulaire du framework. Près de 20 modules sont à votre disposition pour votre développement, modules que vous pouvez sélectionner selon votre convenance suivant s’ils sont utiles pour votre application ou non. Dans l’architecture standard, les divers modules sont répartis selon les 6 grandes catégories suivantes :

  • Core Container : il comprend les modules élémentaires spring-core, spring-beans, spring-context, spring-context-support et spring-expression. Core et Beans constituent l’architecture de base du framework et comprennent par exemple la fonction d’injection de dépendance, ainsi qu’un support POJO. Le module Context tient ses fonctions du module Beans et apporte des fonctions telles que par exemple l’internationalisation ou le chargement de ressources. De plus, il prend en charge les fonctions Java Enterprise comme EJB et JMX (Java Management Extensions). Avec Context-Support, des bibliothèques de fournisseurs tiers peuvent être intégrées à Spring. spring-expression comprend le langage Spring Expression Language (SPeL), une extension du Unified Expression Language des spécifications JSP-2.1-Spezifikation (JavaServer Pages).
  • AOP et instrumentation : pour permettre la programmation orientée aspect, le framework Spring comprend le module spring-aop ainsi que le module spring-aspects pour intégrer le langage évoqué à l’instant AspectJ. Les composants spring-instrument permettent d’instrumentaliser les classes Java (et donc de modifier les bytecodes en process), et permettent de plus des implémentations ClassLoader pour les différents serveurs d’applications.
  • Messaging : pour pouvoir constituer la base d’application de messagerie, Spring dispose de certaines fonctions de chiffrement du projet d‘intégration Spring, comme par exemple « Message », « MessageChannel » ou « MessageHandler ». Le module correspondant porte le nom spring-jdbc.
  • Data Access/Integration : les modules de cette catégorie servent à octroyer les compétences utiles aux applications Java pour leurs interactions avec d’autres applications et de réguler les accès aux données. Le module spring-jdbc met par exemple à disposition une couche d’abstraction, qui définit la manière dont un client a accès à une base de données, en laissant de côté le codage typique JDBC assez compliqué. Spring-orm offre en revanche les couches d’intégration aux interfaces ORM (mapping objet-relationnel), avec lesquelles il est possible d’accéder aux bases de données relationnelles. On trouve également les composants spring-tx (prend en charge la gestion programmée des transactions pour toutes les classes et POJOs), spring-oxm (couche d’abstraction pour les mapping Object/XML) et spring-jms (module pour générer et traiter les messages).
  • Web : dans cette catégorie, on trouve les modules spécifiques pour les applications Web, à savoir spring-web, spring-webmvc et spring-websocket. Le premier apporte à l’application Java les caractéristiques d’intégration orientées Web typiques comme une fonction upload pour les données en plusieurs parties (multipart) ou un client HTTP. Le module spring-webmvc est également décrit comme une servlet Web et reçoit les implémentations Spring pour la réalisation de l’architecture standard modèle-vue-contrôleur et des services Web REST. spring-websocket permet le transfert de données entre le client et le serveur sur la base de Websockets.
  • Test : le module spring-test permet  de vérifier la fonctionnalité des composants de votre application Java. Ainsi, vous pourrez soumettre des tests JUnit complets (avec focus sur chaque composant) ainsi que des tests d’intégration (se concentrant cette fois sur les interactions entre les composants) grâce à des suppléments au framework adéquats, comme JUnit ou Test NG.

Spring : Java pour le développement Web moderne

Dès le début, Java et les technologies associées ont été conçues pour le développement Web. Après quelques difficultés au lancement dues principalement au faible niveau de prise en charge des navigateurs antérieurs, aux bandes passantes encore faibles des connexions Internet privées et aux puissances encore insuffisantes des anciens PC, le langage de programmation ne perça qu’à la fin des années 1990. Au tout début du World Wide Web, les applets Java étaient encore populaires (des applications écrites en Java qui sont exécutées dans le navigateur à l’aide des environnements d’exécution adéquats et qui peuvent interagir avec l’utilisateur sans avoir à envoyer des données aux serveurs. Cependant, du fait de leur besoin important en ressources, ils n’étaient pas des plus pratiques. Avec l’avènement des appareils mobiles, qui ne prennent pas en charge les applets, les éléments Web interactifs ont complétement disparus de l’écran.

Alors que Java a fait assez rapidement un flop en frontend, le langage de programmation est devenu considérable coté serveur, ce qui fait que les scénarios d'application sont très variables : des servlets et applets exécutés sur le serveur aux solutions entreprises complexes comme Middleware, les logiciels bancaires ou les grands systèmes de gestion de contenu, les différentes technologies Java sont aujourd’hui plus demandées que jamais, si tout du moins le budget le permet. Compte tenu de ses avantages en termes de coûts et de temps, près des trois quarts de tous les sites Web utilisent le langage de script PHP. Pour les développeurs Web, qui travaillent néanmoins avec Java, Spring offre à la fois les structures nécessaires et une simplification considérable du processus de travail. Les avantages des applications Web Java sont, entre autres, leur indépendance vis-à-vis des plateformes, leur capacité d’intégration aux logiciels et process d’entreprise, ainsi que leur structure claire.

Pour quels projets le framework Java convient-il le mieux ?

Spring est souvent décrit comme un framework lightweight (c’est-à-dire léger) pour les applications Java, puisque presque aucune modification du code source n'est nécessaire pour profiter de ses nombreux avantages. Il s’agit entre autres de simplification dans la mise en œuvre de la gestion des transactions, des interfaces et de l’accès aux bases de données. La possibilité d'effectuer facilement des tests unitaires et d'intégration est également une raison pour laquelle le Framework Spring est si apprécié.

Le point central est tout de même incontestablement le fait de renoncer aux composants spécifiques à la plateforme et non-standardisés, ce qui rend Spring hautement portable et indépendant des serveurs d’application. De ce fait, il est très facile de l’installer en tant que méta-framework, dans lequel d’autres composants externes ou même des frameworks pourront être intégrés. Un exemple d’application typique est le développement d’un backend basé Spring, qui peut être ensuite relié à un frontend créé au préalable à l’aide d’un framework UI comme Twitter Bootstrap.

Spring prend tout son sens dans la réalisation d’applications commerciales complexes. Pour les entreprises, le framework ainsi que Java est en général un très bon choix pour mettre en place les technologies nécessaires. Outre les frameworks Web purs, comme par exemple le projet concurrent Struts d’Apache, Spring ne se limite pas aux applications Web, mais permet également le développement de solutions bureautiques. Pour les applications simples, qu'elles soient en ligne ou hors ligne, Spring (et Java) convient moins, même si la réalisation de tels projets est tout à fait possible.

Aperçu des avantages de Spring

Si vous êtes sur le point de développer un projet Web d’envergure et que vous recherchez un framework, Spring est une solution à considérer. Si vous utilisez en particulier Java dans votre projet, vous pourrez en effet considérablement faciliter votre travail en regroupant de manière flexible des modules. Vous obtiendrez alors ainsi une architecture de base performante, que vous ne pourrez presque pas modifier, et vous pourrez vous concentrer sur le développement d’une logique business réelle. Dans les répertoires GitHub officiels, vous pouvez télécharger le framework quand vous le souhaitez et l’essayer. Voici une liste des avantages de l’environnement de développement Java pour y voir plus clair :

  • Logique pouvant être instaurée selon le plain old Java object (POJO) ;
  • Structures de codes de base prêtes à l’emploi, qui nécessitent peu de modifications ;
  • Pas de serveur d’application nécessaire ;
  • Tests Unit et d’intégration possibles ;
  • Architecture MVC ;
  • Possibilité d’une programmation orientée aspect avec AspectJ ;
  • Injection de dépendance (régulation de dépendance externe) ;
  • Gestion de transaction programmable.