Maison > Java > javaDidacticiel > Pourquoi mon aspect AOP n'est-il pas invoqué dans les appels de méthodes imbriquées ?

Pourquoi mon aspect AOP n'est-il pas invoqué dans les appels de méthodes imbriquées ?

Susan Sarandon
Libérer: 2024-10-31 15:51:02
original
429 Les gens l'ont consulté

Why is my AOP Aspect Not Invoked in Nested Method Calls?

Appels de méthodes imbriquées et Spring AOP

Considérez le code suivant dans ABC.java :

<code class="java">public void method1() {
    // ...
    method2();
    // ...
}

public void method2() {
    // ...
    // ...
}</code>
Copier après la connexion

L'ajout d'AOP à la méthode2 implique la création d'un aspect , AOPLogger, contenant une méthode de vérification d'accès, checkAccess. La configuration Spring comprend :

<code class="xml"><bean id="advice" class="p.AOPLogger" />
<aop:config>
    <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
    <aop:aspect id="service" ref="advice">
        <aop:before pointcut-ref="abc" method="checkAccess" />
    </aop:aspect>
</aop:config></code>
Copier après la connexion

Cependant, l'aspect, checkAccess, n'est pas invoqué lorsque la méthode2 est appelée. Qu'est-ce qui manque ?

Proxies AOP et injections de haricots

AOP fonctionne en appliquant des aspects aux proxys entourant le bean. Lorsqu'un bean est référencé, ce n'est pas la classe instanciée mais une classe synthétique qui délègue à la classe réelle et ajoute des fonctionnalités comme AOP.

Dans l'exemple, method2 est appelée directement sur la classe. Lorsqu'elle est injectée en tant que bean Spring, la classe englobante est injectée en tant que proxy, déclenchant les aspects sur les appels de méthode.

Pour invoquer AOP sur les appels de méthode imbriqués, envisagez les options suivantes :

  1. Séparation des beans : divisez la méthode1 et la méthode2 en beans séparés.
  2. Framework AOP non Spring : utilisez un framework AOP non orienté Spring pour un contrôle plus granulaire sur aspect application.

La documentation Spring fournit plus de détails et des solutions de contournement potentielles.

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