L'objectif de ce TP est de comprendre l'intérêt d'un framework comme Spring en voyant les limitations courantes que l'on peut rencontrer, et de voir comment Spring adresse ces limitations.
- Exécutez cette application pour vous familiariser avec les différentes classes et lire la JavaDoc de chaque classe pour comprendre le rôle de chacune d'entre elles.
- Analysez cette application et définissez le graph de dépendances entre les classes (uniquement celles de votre projet, pas les dépendances externes). Il y a une dépendance entre deux classes lorsqu'une classe fait référence à une autre (par un appel de méthode par exemple).
- Concernant la classe
BitcoinService
, comment la dépendance avecWebPageManager
est-elle gérée ? Essayer d'optimiser (sans utiliser Spring). Faire de même pour la classeProduitManager
avecBitcoinService
etWebPageManager
. - Qu'avez-vous gagner avec ces optimisations ? Quelle est la particularité de
BitcoinService
,WebPageManager
etProduitManager
? De combien d'instances de ces classes aurait-on en théorie besoin ? Est-ce le cas actuellement ? - Committez/pushez !
- Créez une branche
spring
à partir demaster
- Créez à l'aide de votre IDE un fichier
pom.xml
et ajoutez les dépendances nécessaires pour le framework Spring (version 5.1.6.RELEASE) - Créez une classe de configuration pour Spring appelée
SpringConfig
et la placer dans le packagejava240
- Ajoutez la configuration nécessaire pour définir un bean en singleton pour la classe
BitcoinService
- Modifiez la classe
Main
pour pouvoir utiliser ce bean dans la fonctionnalité de récupération du cours du bitcoin. - Faites de même avec
ProduitManager
. Avez-vous résolu les problèmes soulevés dans l'introduction ? - Faites en sorte que le
BitcoinService
utilisé dansProduitManager
soit le même que celui de la classeMain
- Faites gérer la classe
WebPageManager
par Spring et remplacez les instanciations manuelles dansProduitManager
etBitcoinService
- Créez un deuxième bean pour
BitcoinService
qui met l'attributforceRefresh
àtrue
et utilisez ce dernier dans la fonctionnalité de récupération du cours du bitcoin. Vérifier que le site est systématiquement consulté pour la fonctionnalité de consultation du cours tandis que pour l'affichage des prix en bitcoin des produits, on utilise le cache à partir du deuxième appel. - Faire en sorte que le catalogue soit initialisé systématiquement à l'instanciation du bean
ProduitManager
- Créez une autre branche
spring-auto
à partir despring
- Remplacez la déclaration manuelle des beans dans
SpringConfig
par un scan automatique de Spring en ajoutant les annotations nécessaires sur les différentes classes. - Remplacez les injections effectuées manuellement par de l'autowiring.
- Vérifier que l'application fonctionne toujours.
- Créez un fichier de
properties
et définissez une propriétébitcoinService.forceRefresh
valorisée àfalse
et utilisez cette propriété pour construire le beanBitcoinService
utilisé dans la classeMain
. Constatez que cela fonctionne toujours et qu'en redémarrant votre application après avoir passé cette propriété àtrue
, le cache est bien utilisé. Faites de même avec les autres constantes de l'application qu'il vous semblerait intéressant d'externaliser.
- Créez une autre branche
spring-boot
à partir despring-auto
- Remplacez votre
pom.xml
par unpom.xml
utilisant Spring Boot et convertissez votre application Spring normale en application Spring Boot console. Constatez la simplification (relative) du code et les possibilités maintenant à votre disposition !