Dans un billet intitulé "Principes fondamentaux de la POA" J'ai demandé une L'anglais du roi explication de ce qu'est le POA, et de ce qu'il fait. J'ai reçu des réponses très utiles et des liens vers des articles qui m'ont aidé à comprendre toute la théorie.
Mais maintenant, l'AOP a retenu toute mon attention, et tous ces articles et extraits de chapitres sont fantastiques, mais en chaque cas ils consistent en une théorie noble, des modèles UML vagues et un niveau d'abstraction beaucoup trop élevé à mon goût.
Voici ma compréhension de la théorie de la POA, juste pour clarifier, donc si vous voyez quelque chose qui semble faux, faites-le moi savoir !
-
Les préoccupations transversales telles que la journalisation, l'authentification, la synchronisation, la validation, le traitement des exceptions, etc. deviennent fortement couplées dans les systèmes non-AOP car elles sont utilisées de manière universelle par presque tous les composants/modules du code source.
-
La POA définit aspects (classes/méthodes) qui permettent d'abstraire ces préoccupations transversales à l'aide d'outils de gestion de l'information. points de jonction , conseils y pointscuts .
a. Conseils - Le code réel (méthode d'un aspect, peut-être ?) qui met en œuvre la préoccupation transversale (c'est-à-dire qui effectue la journalisation réelle, la validation, l'authentification, etc.)
b. Point de jonction - Un événement déclenché dans le code non-AOP qui entraîne l'exécution de l'avis d'un aspect particulier ("tissé" dans le code non-AOP).
c. Pointcut - Il s'agit essentiellement d'une mise en correspondance des points de jonction (événements déclencheurs) avec l'exécution des conseils.
-
Tous les aspects sont modularisés (LoggingAspect, AuthenticationAspect, ValidationAspect, etc.) en composants et enregistrés avec un AspectWeaver . Lorsque du code non-AOP/POJO rencontre un point de jonction, AspectWeaver " tisse " (intègre) le conseil mappé autour du code non-AOP :
public class LoggingAspect { // ...
public void log(String msg) { ... }
}
public class ExceptionHandlingAspect { // ..
public void handle(Exception exc) { ... }
}
public class NonAOPCode { // ...
@LoggingAspect @ExceptionHandlingAspect public void foo() { // do some stuff... }
}
// Now in the driver public static int main void(String[] args) { NonAOPCode nonAOP = new NonAOPCode(); nonAOP.foo(); }
// The AspectWeaver *magically* might weave in method calls so main now becomes: { NonAOPCode nonAOP = new NonAOPCode();
log(someMsg); nonAOP.foo(); handle(someExc);
}
La question à 64 000 $ : Ma compréhension de la POA basée sur Java est-elle bonne ou mauvaise, et pourquoi ? Comment pourrait-on correctement utiliser les annotations pour mettre en œuvre les aspects, les conseils, les points de jonction, les coupes transversales et ce soi-disant tisseur d'aspects ?