implanter l'aop... comment partir du bon pied?
DESCRIPTION
Présenté au Confoo 2012, Montréal, Québec, Canada le 29 février 2012.----Depuis quelques années, plusieurs entreprises ont introduit de l'AOP dans leurs projets pour les bénéfices architecturaux et techniques offerts. Malheureusement l'AOP vient également avec son lot de pièges. Pour ces raisons, plusieurs délaissent l'AOP à cause de la complexité indue qui pourrait toutefois être réduite en suivant de simples bonnes pratiques et en préparant adéquatement son intégration.Cette présentation a pour but d'aider une équipe à embrasser l'AOP tout en évitant les pièges. On y traitera de diverses bonnes et mauvaises pratiques avec l'AOP (architecture, IDE, refactoring, tests...). L'accent sera placé sur des conseils pratiques comme le choix de frameworks (ex.: AspectJ ou Spring-AOP), du mode de tissage approprié à votre contexte, des conflits avec d'autres technologies Java, etc.TRANSCRIPT
![Page 1: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/1.jpg)
Implanter l'AOP... Comment par2r du bon pied?
Confoo 2012
Montréal, Québec, Canada
29 février 2012
![Page 2: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/2.jpg)
Félix-‐Antoine Bourbonnais Ing. jr, PSM-‐I
! Formateur et Coach Agile
! Enseignement et forma2ons o TDD, Réusinage, OO avancé, AOP, tests, Scrum
! Recherches o AOP, agilité, tests et mocks
! Développeur o Java et Python (principalement)
2
@fbourbonnais
![Page 3: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/3.jpg)
Objec2f de la présenta2on
3 Image: jscreationzs / FreeDigitalPhotos.net
![Page 4: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/4.jpg)
Réchauffement…
Quelles sont vos aWentes?
Qui fait ou a fait de l’AOP dans un projet?
En un mot: AOP?
Qui a eu une mauvaise expérience avec l’AOP?
4 Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net
![Page 5: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/5.jpg)
PRÉOCCUPATIONS TRANSVERSES Les
5
![Page 6: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/6.jpg)
Préoccupa2ons transverses
6
Certaines préoccupa2ons secondaires sont impossibles à regrouper et contaminent
plusieurs classes.
Angl.: Crosscutting concerns.
![Page 7: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/7.jpg)
Préoccupa2ons transverses
Éparpillement
Enchevêtrement
7
![Page 8: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/8.jpg)
Préoccupa2ons transverses
8
Enchevêtrement (cohésion)
Persistance
Fonc2onnalité principale
Sécurité
Observa2on
![Page 9: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/9.jpg)
Enchevêtrement (1)
9
![Page 10: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/10.jpg)
Enchevêtrement (2)
10
![Page 11: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/11.jpg)
Enchevêtrement (3)
11
![Page 12: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/12.jpg)
Enchevêtrement (4)
12
![Page 13: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/13.jpg)
Enchevêtrement
(principale)
13
![Page 14: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/14.jpg)
Enchevêtrement
(récapitula2f)
14
![Page 15: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/15.jpg)
Préoccupa2ons transverses
15
Éparpillement (dispersion)
Persistance
![Page 16: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/16.jpg)
L’AOP Introduc2on à
16
![Page 17: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/17.jpg)
Orienta2on objet et préoccupa2ons
Encapsula2on
Modularité
Couplage SRP
Cohésion
17
![Page 18: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/18.jpg)
Orienta2on objet et préoccupa2ons
18
Théoriquement, chaque classe devrait représenter une seule préoccupa2on.
![Page 19: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/19.jpg)
Orienta2on aspect
19
Aspect 1 Classe 1
Aspect 2
Aspect 3
Classe 2
C
C
A
A
A
![Page 20: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/20.jpg)
LA TERMINOLOGIE ET DU FONCTIONNEMENT
Rappel rapide de
20
![Page 21: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/21.jpg)
Un aspect
! Un module encapsulant une préoccupa2on
! Peu gérer les préoccupa2ons transverses ! Généralement une classe « évoluée »
o Capacités supplémentaires afin de permeWre l’encapsula2on de préoccupa2ons transverses
21
![Page 22: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/22.jpg)
Contenu typique d’un aspect
Code à exécuter
Indica2on des cibles Aspect
22
![Page 23: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/23.jpg)
Aspect en AspectJ
23
public aspect VisitorAspect { !
!
/∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ !
protected pointcut startMethod() : !
execution( ∗ start∗(..) ); !
!
/∗ −−−−−−−− Advices −−−−−−−− ∗/ !
after() : startMethod() { !
printHello(); !
}!
!
} !
!
![Page 24: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/24.jpg)
L’AOP N’A PAS AUTANT RAYONNÉ QUE PRÉVU?
Pourquoi est-‐ce que
24
![Page 25: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/25.jpg)
Pourquoi est-‐ce que plusieurs entreprises délaissent l’AOP?
Mauvaises raisons et u2lisa2ons
Complexité ajoutée
Manque de support et d’intégra2on
Manque de connaissances et de compétences
Trop de promesses
25
![Page 26: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/26.jpg)
Aspect != AOP
26 Image: Danilo Rizzuti / FreeDigitalPhotos.net
![Page 27: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/27.jpg)
Enquête auprès de débutants (2009)
! Pas plus difficile à apprendre que l’OO (74%)
! Il est difficile de tester un aspect (100%) o N’avaient pas une grande expérience avec les tests.
! Les tests sont simplifiés grâce à l’AOP (67%)
! Plusieurs autres difficultés sont causées par un manque d’expérience
! 100% réu2liseraient l’AOP mais 62% avec prudence
27
[1] Félix-Antoine Bourbonnais and Luc Lamontagne, Using AOP for an Academic Agile Project: A Pilot Study, 1st International Workshop on Empirical Evaluation of Software Composition Techniques (ESCOT 2010), Rennes, France, 2010.
![Page 28: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/28.jpg)
Enquête auprès de débutants (2009)
! Le contexte o Étudiants de bacc. (3e/4e année) o Projet de session (3 mois) o Portail financier web avec GWT ou Spring
! Pour les autres données et le contexte détaillé: o Félix-‐Antoine Bourbonnais and Luc Lamontagne,
Using AOP for an Academic Agile Project: A Pilot Study ESCOT 2012, Renne, France, 20120.
o hWp://www.comp.lancs.ac.uk/~greenwop/escot10/escot10_submission_2.pdf
28
Cri2que de la validité
![Page 29: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/29.jpg)
INTRODUIRE DE L’AOP DANS VOTRE PROJET
Comment
29
![Page 30: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/30.jpg)
1. Avoir un but…
30 Image: renjith krishnan / FreeDigitalPhotos.net
![Page 31: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/31.jpg)
2. Choisir sa technologie
31 Image: Sura Nualpradid / FreeDigitalPhotos.net
![Page 32: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/32.jpg)
Choix technologiques
! Tisseur / cadre applica2f (framework) o Compilateur spécial o Pur java
! Mode de 2ssage o LTW (au chargement des classes) o CTW (à la compila2on)
32
![Page 33: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/33.jpg)
Choix technologiques
! Syntaxe o Java o AspectJ Language (.aj) o @AspectJ o XML
! Intégra2on o Maven o AJDT
33
![Page 34: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/34.jpg)
3. Considérer la complexité ajoutée
Gains
Complexité
34
![Page 35: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/35.jpg)
4. Considérer l’intégra2on
! Avec d’autres cadres applica2fs (framework)
! Le système de déploiement
! L’intégrateur con2nu ! Les technologie de tests ! Etc.
35 Image: manostphoto / FreeDigitalPhotos.net
![Page 36: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/36.jpg)
5. S’assurer de maîtriser les concepts
36
Rappelez-‐vous que vous introduisez un nouveau paradigme et non pas simplement une
technologie « cool »!
! Prototyper ! Essayer sur un pe2t projet
! Bien se documenter
! Bien former son équipe
Image: renjith krishnan / FreeDigitalPhotos.net
![Page 37: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/37.jpg)
6. Se discipliner
! Résistez au « canon pour tuer une mouche »
! L’AO tourne généralement mal entre les mains de cowboys
! Balancez toujours la complexité versus le gain
! Tester!
37 Image: photostock / FreeDigitalPhotos.net
![Page 38: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/38.jpg)
MAUVAISES PRATIQUES Quelques
Image: Ambro/ FreeDigitalPhotos.net 38
![Page 39: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/39.jpg)
Trop, c’est comme pas assez…
! Quand 50% du code est composé d’aspects…
! Est-‐ce 50% du code est composé de préoccupa2ons transverses?
Image: farconville / FreeDigitalPhotos.net 39
![Page 40: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/40.jpg)
L’AOP n’est pas un pansement
! Suis-‐je en train d’u2liser l’AOP pour corriger un problème de design?
! Ne vous servez pas de l’AOP comme parfum afin de masquer les mauvaises odeurs…
Image: digitalart / FreeDigitalPhotos.net 40
![Page 41: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/41.jpg)
Le « trip techno »
41
L’AOP c’est trop COOL !!
La chute pourrait être douloureuse!
• « AspectJ... WOW trop cool ! » • « On peut bidouiller plein de trucs avec ça ! » • « Tsé le truc qu’on arrivait pas à faire... on va faire un aspect qui va
changer ça puis qui va décider si… »
![Page 42: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/42.jpg)
BONNES PRATIQUES Quelques
42 Image: photostock / FreeDigitalPhotos.net
![Page 43: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/43.jpg)
OO encore d’actualité
43
Ce qui était vrai en OO l’est encore en AO
![Page 44: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/44.jpg)
Conseils de base habituels
! Code propre ! Cohésion dans l’aspect ! Couplage de l’aspect
44
![Page 45: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/45.jpg)
Un aspect? Vraiment?
45
Est-‐ce une préoccupa2on transverse?
Est-‐ce que je pourrais réusiner mon design OO pour aWeindre le même objec2f?
![Page 46: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/46.jpg)
U2liser l’aspect comme « lien »
! Déléguer à une classe qui con2ent la logique liée à ceWe préoccupa2on
! U2liser l’aspect pour 2sser la logique ! Note: Peut varier en fonc2on du 2sseur (ex.: AspectJ)
46
pointcut inXorY() :
execution(* *(..))
&& within(X || Y);
after() : inXorY {
persistance.clearCache();
}
X (classe cible)
Y (classe cible)
Aspect
Persistance (classe à 2sser)
![Page 47: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/47.jpg)
Dépendances et couplage
! N’oubliez pas que l’aspect est couplé à toutes les classes où il s’injecte*. * Où un point de coupure apparie
Image: Salvatore Vuono / FreeDigitalPhotos.net 47
![Page 48: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/48.jpg)
Limiter le couplage
48
Un aspect trop fortement couplé et ayant des dépendances éloignées augmente la complexité́
et le rend vulnérable aux changements.
« AOSD-‐Evolu2on Paradox » [1]
[1] Dean Wampler, Aspect-Oriented programming and design for java and AspectJ, 2007. http://polyglotprogramming.com/papers/AOPIntroAndPrinciplesTalk.pdf.
![Page 49: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/49.jpg)
Précision du point de coupure
! Un PC précis est plus à risque d’être impacté par un changement
! Un PC très générique risque d’apparier trop de PJ ! On appelle cela le « Fragile Pointcut Problem » [1]
49
pointcut pcPrecis() : execution(void C.doX());
pointcut pcGenerique() : execution(* C.doX*(..));
pointcut pcPourEtreCertainAvoirProbleme : execution(* *(..));
- Si C.doX() est renommé pour C.doXInContext() … - Si on ajoute C.doXPasRapportAvecAspect() …
[1] C. Koppen et M. Störzer. PCDiff : attacking the fragile pointcut problem. In European Interactive Workshop on Aspects in Software (EIWAS), 2004.
![Page 50: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/50.jpg)
Conscience ou inconscience?
50
Est-‐ce que les classes 2ssées devraient avoir conscience ou non des aspects?
Débat ouvert « obliviousness » vs « awareness »
![Page 51: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/51.jpg)
TESTS D’ASPECTS Bonnes pra2ques de
51
![Page 52: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/52.jpg)
Tests de haut niveau
52
Les aspects contribuent aux fonc2onnalités globales du système
Rien ne change pour les tests de haut niveau (fonc2onnels, accepta2on, etc.)
![Page 53: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/53.jpg)
Tests unitaires
53
![Page 54: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/54.jpg)
Tester unitairement un aspect
La bonne chose (advice)
Au bon moment (pointcut)
Test unitaire d’aspect
54
![Page 55: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/55.jpg)
Technique du pot de miel
55
Aspect
Pot 1
Pot 2
Pot N
X UTest
1
2
3
![Page 56: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/56.jpg)
56
![Page 57: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/57.jpg)
Encore faim?
Image: rajcreationzs / FreeDigitalPhotos.ne 57
Téléchargez les diaposi2ves complètes sur developpementagile.com
hWps://joind.in/6005
![Page 58: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/58.jpg)
QUESTIONS Période de
58
![Page 59: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/59.jpg)
CADRE APPLICATIF (FRAMEWORK) Choisir son
59
![Page 60: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/60.jpg)
Quelques cadres pour Java
! AspectJ
! Spring-‐AOP
! Guice-‐AOP
! …
60
![Page 61: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/61.jpg)
AspectJ
! Le plus complet o Plusieurs primi2ves o Plusieurs PJ possibles
! Extension à Java o Requiert un compilateur d’Aspects o Ou de remplacer le chargement des classes (CL ou Java Agent)
61
![Page 62: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/62.jpg)
Spring supporte deux 2sseurs
Spring
Spring AJ
Spring AOP
62
![Page 63: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/63.jpg)
Sprint-‐AOP
! Java 100% pur o Ne requiert pas de compilateur spécial o Ne requiert pas de Java Agent o U2lise des « Proxies » dynamiques
! Limita2ons o Tissage possible uniquement dans des Beans Spring o Peu de primi2ves et limitées (ex.: exécu2on de méthodes) o Ne peut intercepter des appels à « this »
63
![Page 64: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/64.jpg)
Spring-‐Aj
! Spring peut se servir d’aspects de Spring pour élargir ses fonc2onnalités
! Spring se sert d’AspectJ pour lui-‐même
! @Configurable permet d’injecter des dépendances dans des objets qui ne sont pas des Beans
64
Souvent une mauvaise odeur concernant le design… Spring
FW++ AspectJ Spring
AJ
![Page 65: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/65.jpg)
Syntaxe ou 2sseur?
Tissage
Spring-‐AOP (proxy)
AspectJ
Spring-‐AJ
Syntaxe (langage)
XML
@AspectJ
Langage AJ (.aj)
65
![Page 66: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/66.jpg)
Google Guice
! Limita2ons similaires à Spring-‐AOP (par « proxies »)
! Syntaxe propre o Java o Pas de syntaxe cachée dans les chaînes de caractères des annota2ons (comme @AspectJ)
66
![Page 67: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/67.jpg)
MODE DE TISSAGE Choisir son
67
![Page 68: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/68.jpg)
Deux grandes approches de 2ssage
À la compila2on (CTW)
À l’exécu2on (LTW)
68
![Page 69: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/69.jpg)
CTW (Compile-‐Time Weaving)
69
! Tissage à la compila2on
! Remplace généralement le compilateur de Java
! Peut 2sser uniquement dans le code compilé (pas dans une lib. externe)
! Produit du Bytecode standard 2ssé
![Page 70: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/70.jpg)
LTW (Load-‐Time Weaving)
70
! Tissage lors du chargement de la classe
! Remplace (assiste) le chargeur de classes de Java (ClassLoader)
! Requiert généralement le démarrage de la JVM avec un JavaAgent
! Peut être probléma2que avec des JEE Container ou entrer en conflit avec d’autres instrumenta2ons
![Page 71: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/71.jpg)
L’INTÉGRATION Considérer
71
![Page 72: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/72.jpg)
AJDT
! Plugin Eclipse pour AspectJ ! Désagrément sub2le:
o Force le CTW sur le projet dans Eclipse quand la nature « AspectJ » est ac2vée
! Offre de l’assistance o Complé2on (limitée) o Réusinage (limité) o Colora2on syntaxique et validateur
72
![Page 73: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/73.jpg)
Maven
! Plugin pour AspectJ ! Si combiné avec AJDT
o Compile avec AJC versus JDT-‐AJ pour Eclipse o Toujours faire « mvn clean » pour éviter les problèmes
! Pour du LTW u2lisez le Exec Mabven Plugin (ou autre) et passez le JavaAgent
73
![Page 74: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/74.jpg)
Spring + AJ
! U2liser le Java Agent de Spring plutôt que celui par défaut d’AspectJ
! AWen2on à la combinaison Spring-‐AOP (proxy) et AJDT
74
![Page 75: Implanter l'AOP... Comment partir du bon pied?](https://reader033.vdocuments.site/reader033/viewer/2022052909/55983fd81a28abf6458b4862/html5/thumbnails/75.jpg)
Autres considéra2ons
! Maven o Il est possible que les métriques soient comptées en double en CTW.
o Ex.: couverture des tests
! JEE Container et Spring o Des chargeurs de classes spécifiques sont disponibles pour plusieurs JEE Container.
o Sinon, il faut se rabaWre sur u Java Agent de la JVM
75