Tutoriel pour découvrir la Programmation Orientée Aspect avec Spring AOP Par Go

Tutoriel pour découvrir la Programmation Orientée Aspect avec Spring AOP Par Gokan EKINCI Date de publication : 3 juin 2020 Durée : 1h Ce tutoriel s'adresse aux développeurs qui souhaitent découvrir la Programmation Orientée Aspect grâce au framework Spring Pour réagir à cette interview, un espace de dialogue vous est proposé sur le forum Commentez Tutoriel pour découvrir la Programmation Orientée Aspect avec Spring AOP par Gokan EKINCI I - Prérequis................................................................................................................................................................. 3 II - Qu'est-ce que l'AOP ?............................................................................................................................................3 III - Dans quel contexte utilise-t-on l'AOP ?................................................................................................................ 3 IV - Quelques dates sur l'AOP....................................................................................................................................4 V - AspectJ avec Spring..............................................................................................................................................4 V-A - Dépendances Maven....................................................................................................................................4 V-B - Les annotations AspectJ.............................................................................................................................. 5 V-C - Syntaxe AspectJ...........................................................................................................................................5 V-D - Exemple avec les loggers............................................................................................................................5 VI - Remerciements.....................................................................................................................................................7 - 2 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2017 Gokan EKINCI. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. http://gokan-ekinci.developpez.com/tutoriels/java/apprendre-la-programmation-orientee-aspect-avec-spring-aop/ Tutoriel pour découvrir la Programmation Orientée Aspect avec Spring AOP par Gokan EKINCI I - Prérequis Vous pouvez utiliser l'IDE que vous souhaitez pour suivre ce tutoriel. Le code source des exemples présentés dans ce tutoriel est disponible dans ce repository Git, et plus particulièrement dans cette classe. Les outils dont vous aurez besoin pour suivre ce tutoriel sont : • JDK 8 d'Oracle ; • Maven 3. N'hésitez pas à lire le tutoriel Maven 3 si vous souhaitez en apprendre plus sur ce dernier. II - Qu'est-ce que l'AOP ? L'AOP (« Aspect Oriented Programming » ou « Programmation Orientée Aspect » en français) n'est pas à proprement parler un langage de programmation pour créer des programmes. C'est un concept qui permet d'exécuter une action lorsqu'un événement est déclenché (ex. : une méthode qui est exécutée). On peut donc voir l'AOP comme une extension au langage de programmation utilisé dans le projet. III - Dans quel contexte utilise-t-on l'AOP ? Lorsque l'on programme par aspect, on distingue le code métier du code technique. L'AOP permet de factoriser le code technique du projet. Le terme crosscutting concerns (ou « fonctionnalités transversales » en français) est utilisé pour désigner cette partie technique. Pour citer quelques exemples de crosscutting concerns, l'AOP peut être utilisé pour : • ouvrir/fermer des ressources (ex. : Démarrer et commiter/rollbacker une transaction) ; • vérifier les permissions de l'utilisateur (sécurité) ; • du cache ; • des loggers ; • du monitoring ; • des benchmarks ; • interrompre une méthode qui prend beaucoup de temps pour s'exécuter ; • dans une moindre mesure : changer le comportement d'une méthode pour retourner un nouveau résultat. Voici un exemple de code sans l'AOP : public void addPermissionsToUser(Permission[] permissions, User user) throws SQLException { try { // Code technique : SI aucune transaction n'est en cours ALORS // Code technique : créer la transaction (cf: START TRANSACTION en SQL) // Code technique : FIN SI // Code métier : Ajouter des droits à l'utilisateur } catch (SQLException e) { // Code technique : SI une exception est lancée ALORS // Code technique : rollbacker // Code technique : propager l'exception // Code technique : FIN SI } finally { // Code technique : SI une exception n'est pas lancée ET la méthode courante est la dernière méthode transactionnelle exécutée ALORS // Code technique : commiter // Code technique : FIN SI } } - 3 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2017 Gokan EKINCI. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. http://gokan-ekinci.developpez.com/tutoriels/java/apprendre-la-programmation-orientee-aspect-avec-spring-aop/ Tutoriel pour découvrir la Programmation Orientée Aspect avec Spring AOP par Gokan EKINCI Voici un exemple de code avec l'AOP : @Transactional public void addPermissionsToUser(Permission[] permissions, User user) { // Code métier : Ajouter des droits à l'utilisateur } IV - Quelques dates sur l'AOP • Juillet 1996 : la première apparition de l'AOP est attribuée à MTS (Microsoft Transaction Service) avec Windows NT 4.0, pour avoir mis en place un système d'interception pour les transactions et la sécurité. • L'AOP en Java avec AspectJ : • 1997 : le projet AspectJ est créé par Gregor Kiczales et ses collègues, alors employés de la société Xerox PARC, • 2001 : une première version publique est publiée, • décembre 2002 : le projet est confié à la fondation Eclipse, • 20 décembre 2005 : l'introduction des annotations dans Java 5 (4 octobre 2004) permet au projet AspectJ 5 d'avoir une nouvelle syntaxe à base d'annotations. Il est alors possible d'inclure du code AspectJ directement dans du code Java ; • Le framework Spring intègre le concept d'AOP avec AspectJ, mais ce dernier limite les possibilités d'AspectJ à l'exécution des méthodes publiques. V - AspectJ avec Spring Il existe deux moyens pour mettre en place l'AOP avec AspectJ : • En incluant directement les concepts AspectJ dans du code Java, votre code Java sera alors présent dans un fichier d'extension « .aj » et vous aurez besoin d'un plugin qui permettra à votre IDE de comprendre la syntaxe. • En utilisant des annotations Java. Dans ce tutoriel, nous verrons la deuxième solution. V-A - Dépendances Maven Ajoutez la dépendance ci-dessous dans votre pom.xml : <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> Utilisez l'annotation @EnableAspectJAutoProxy pour activer l'AOP. Vous pouvez placer cette annotation sur votre classe main, ou bien créer une classe de configuration comme ci-dessous : // Cette classe de configuration permet d'activer les aspects. // Vous pouvez la laisser vide. @Configuration @EnableAspectJAutoProxy public class AspectConfig { } - 4 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2017 Gokan EKINCI. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. http://gokan-ekinci.developpez.com/tutoriels/java/apprendre-la-programmation-orientee-aspect-avec-spring-aop/ Tutoriel pour découvrir la Programmation Orientée Aspect avec Spring AOP par Gokan EKINCI V-B - Les annotations AspectJ @Pointcut Crée un alias pour une portion de condition(s). @Before S'exécute AVANT la méthode appelée. La méthode peut prendre en paramètre un JoinPoint. @After Similaire à, @Before mais s'exécute APRÈS la méthode appelée. Peut prendre en paramètre un JoinPoint. @Around S'exécute lorsqu'une méthode est appelée, permet d'exécuter du code avant et après l'exécution de la méthode appelée (comme les filtres web). La méthode peut prendre en paramètre un ProceedingJoinPoint. V-C - Syntaxe AspectJ Il faut placer les exemples ci-dessous dans les annotations (au choix) : @Pointcut, @Before, @Around, ou @After. Template expression(<method scope> <return type> <fully qualified class name>.*(parameters)) Syntaxe représentant toutes les méthodes execution(* *(..)) Syntaxe représentant toutes les méthodes ayant une annotation @annotation(mypackage.MyAnnotation) && execution(* *(..)) V-D - Exemple avec les loggers Créons une classe aspect « RestLogAspect » qui va afficher une ligne de log à chaque fois qu'une route, c'est-à-dire une méthode de notre annotée avec @RequestMapping, sera appelée. Notre ligne de log aura le format suivant : [REST][<durée-méthode-exécutée>ms][<nom-rest-contrôleur>][<nom-méthode-http>][<chemin-http>] [<nom-méthode-contrôleur>()] <valeurs-des-paramètres> Ainsi, l'exécution de la méthode sayHello() du contrôleur ci-dessous : @RestController public class HelloWorldController { @RequestMapping(path = "/hello/{name}", method = RequestMethod.GET) public ResponseEntity<String> sayHello(@PathVariable("name") String name) { return new ResponseEntity<>("hello " + name, HttpStatus.OK); } } … affichera ceci : [REST][31ms][HelloWorldController][GET][/hello/{name}][sayHello()] world Implémentation de notre classe (source) : - 5 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2017 Gokan EKINCI. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. http://gokan-ekinci.developpez.com/tutoriels/java/apprendre-la-programmation-orientee-aspect-avec-spring-aop/ Tutoriel pour découvrir la Programmation Orientée Aspect avec Spring AOP par Gokan EKINCI 1. /** 2. * An aspect class for logging all routes 3. * 4. * @author Gokan EKINCI 5. */ 6. @Component 7. @Aspect 8. @Log 9. public class RestLogAspect { 10. 11. @Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)") 12. public void restAnnotation() {} 13. 14. @Around("restAnnotation() && execution(* *(..))") 15. public Object restLog(ProceedingJoinPoint joinPoint) throws Throwable uploads/S4/ developpez-tutorial-java-spring-aop 1 .pdf

  • 31
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Dec 25, 2022
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 0.2038MB