Maison > Java > javaDidacticiel > le corps du texte

Pourquoi mon aspect AOP ne se déclenche-t-il pas pour les appels de méthodes imbriquées au printemps ?

Linda Hamilton
Libérer: 2024-11-01 01:40:28
original
1021 Les gens l'ont consulté

Why Doesn't My AOP Aspect Trigger for Nested Method Calls in Spring?

Dépannage de l'échec AOP pour les appels de méthodes imbriquées au printemps

Dans la classe ABC.java, deux méthodes sont définies : method1() et method2 (). L'objectif est d'implémenter AOP pour les appels method2().

Une approche consiste à créer une classe AOPLogger.java avec une méthode d'aspect checkAccess(). Dans le fichier de configuration, un bean conseil est défini et un aspect est configuré pour invoquer checkAccess() avant que method2() ne soit appelé.

Cependant, malgré ces configurations, la méthode checkAccess() n'est pas invoquée lorsque method2( ) est exécuté.

Cause première :

Dans Spring AOP, les aspects sont appliqués à un objet proxy entourant le bean. Lorsqu'une instance de bean est obtenue, il ne s'agit pas de la classe réelle mais d'une classe synthétique implémentant des interfaces et ajoutant des fonctionnalités comme AOP.

Résolution :

Dans le scénario actuel, method1() appelle directement method2(). L'aspect n'est pas déclenché car la méthode n'est pas invoquée sur l'objet proxy.

Pour résoudre ce problème, il existe deux options :

  • Diviser method1() et method2() en haricots séparés. Cela permet d'appliquer l'aspect à l'objet proxy entourant method2().
  • Utilisez un framework AOP non orienté Spring qui ne repose pas sur des mécanismes d'objet proxy.

Explication :

La documentation Spring sous « Comprendre les proxys AOP » développe ce comportement et propose des solutions de contournement. Une solution de contournement consiste à séparer les méthodes en beans distincts, comme suggéré ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal