Bonjour,
j'essaie de comprendre la programmation orienté aspect en java, mais est-ce que quelqu'un pourrait m 'expliquer en quoi ça consiste et si c'est souvent appliqué dans les applications n-tiers de nos jours?
je vous remercie d'avance
prugne.
Bonjour,
j'essaie de comprendre la programmation orienté aspect en java, mais est-ce que quelqu'un pourrait m 'expliquer en quoi ça consiste et si c'est souvent appliqué dans les applications n-tiers de nos jours?
je vous remercie d'avance
prugne.
C'est un conceptcasse-gueuletrès puissant.
ça permet d'instrumentaliser du code déjà compilé pour modifier son comportement.
.java -[compilation]-> .class -[aspect]-> .class instrumentalisé
L'utilisation la plus courante est de récupérer un ensemble de méthodes (en spécifiant une expression régulière sur leur signature) et ajouter un traitement avant chaque appel de ces méthodes, ajouter un traitement après chaque appel de ces méthodes et même.... remplacer l'exécution de la méthode par autre chose...
Personnellement, je l'ai déjà utilisé pour faire des tests de perfs:
- par expression régulière, je chope toutes les méthodes **.*(*) ou un truc du genre
- avant chaque appel de méthode, je déclenche un chrono
- après chaque appel de méthode, j'arrête le chrono et je logge le résultat
ça peut aussi être utilisé pour sécuriser tes requêtes SQL (pour ouvrir automatiquement une transaction avant chaque requête et fermer la transaction après chaque requête). Dans ce cas d'utilisation, c'estcomplètement foireuxune très mauvaise pratique.
Donc finalement c'est pas très fiable et faut donc éviter de l'employer?
Bonjour,
C'est un concept assez complexe à comprendre.
En expliquant simplement :
En programmation normale, tu développes des modules techniques ou fonctionnels qui s'appel l'un l'autre pour réaliser une tâche bien précise :
Par exemple tu vas construire une connection jdbc, puis exécuter un ordre SQL et traiter le résultat dans du code métier.
En programmation aspect tu te concentres uniquement sur le code métier. La séquence technique pour faire le traitement est définie par configuration dans le framework que tu vas utiliser. Tu lui donnes uniquement les 'jointpoint' pour faire le lien entre ton code métier et l'aspect.
Le gros point fort est la ré-utilisabilité du code, l'inconvénient est le debuggage des kilomètres de fichier xml de configuration.
Bon courage,
Moi je dirais que la programmation par Aspect peut être très utile pour gérer les "problèmatiques transverses" à une application.
Par exemple les logs (écrire dans un fichier le temps d'exécution de toutes les méthode qui ont pour nom service*), la sécurité (afficher une mire si l'utilisateur ne s'est pas authentifié pour toutes les méthodes qui s'appellent action*), la gestion des transactions (Spring s'appuie sur des aspects).
chaque fois que tu vas te dire "j'aimerais exécuter ce bout de code avant ou après telle ou telle méthode", alors plutôt que de copier-coller du code partout, tu le mets à un seul endroit (donc facilement modifiable) et tu dis "exécute-toi avant tel type de méthode".
Consultant freelance expert Java EE
Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
Je ne dis pas que c'est pas fiable, c'est même très puissant. C'est juste une question de cas d'utilisation.
L'inconvénient majeur d'un aspect est qu'il est difficile d'en mesurer l'impact. Il se peut même que, à cause de l'aspect, le code Java ne corresponde pas du tout à ce qui sera effectivement exécuté (dans le cas d'un aspect qui vient remplacer un appel de méthode).
=> Il ne faut pas utiliser les aspects pour les processus critiques de l'application. Il est même préférable que l'aspect ne change pas du tout le comportement de ton appli mais serve uniquement à ajouter des points de mesure.
Pour moi, le bon cas d'utilisation, c'est d'utiliser les aspects à des fins d'instrumentalisation temporaire, pour mener des analyses.
comme je n'ai pas le temps de me taper toute la doc d'AspectJ quelqu'un pourrait me donner un lien pour faire ça dynamiquement.
J'ai des codes Java et quand ils se présentent pour être exécuté je glisse un code avant et un code après (c'est pour des tests).
Donc: j'écris des code pour l'avant et l'après et je veux que ces codes soient "glissés" au moment de l'exécution pour des méthodes que je désigne.
merci pour tout lien. (précision ces descriptions de choses à faire sont en Groovy)
J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
(mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)
T'aurais pas mentionné Groovy, je t'aurais orienté vers ça : http://blog.xebia.fr/2008/05/02/java...z-vos-classes/
Responsable Java de Developpez.com (Twitter et Facebook)
Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
--------
Architecte Solution
LinkedIn : https://www.linkedin.com/in/nicolascaudard/
Je reviens sur ton explication donc la programmation par aspect est utilisable par tout les frameworks?
je comprends un peu le fonctionnement mais purement technique...je vois difficilement le concept..
en gros c'est pas comme les annotions en java ou tu dis fais des traitements avant et des traitements après sur un objet donné?
pour faire du AOP, il faut soit utiliser spring AOP ou AspectJ, je suppose?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager