Maison > Java > javaDidacticiel > le corps du texte

Pourquoi mon Spring AOP n'intercepte-t-il pas les appels de méthode dans une autre méthode ?

Linda Hamilton
Libérer: 2024-10-31 16:54:30
original
154 Les gens l'ont consulté

Why Doesn't My Spring AOP Intercept Method Calls Within Another Method?

Spring AOP ne parvient pas à intercepter l'appel de méthode dans une autre méthode

Considérez deux méthodes définies dans ABC.java :< ;/p>

<br>public void method1() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">method2();
Copier après la connexion

}

public void method2() {}
< ;/pre>

Pour appliquer AOP sur les appels de méthode2, vous avez défini une classe AOPLogger.java avec une méthode d'aspect checkAccess. Dans votre fichier de configuration :

<br><bean id="advice" class="p.AOPLogger" /><br><aop:config> </p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
<aop:aspect id="service" ref="advice">
    <aop:before pointcut-ref="abc" method="checkAccess" />          
</aop:aspect>
Copier après la connexion


Cependant, lorsque la méthode2 est invoquée, la méthode checkAccess dans AOPLogger n'est pas déclenchée.

Explication

L'aspect AOP est appliqué à un proxy entourant le bean. Lorsque vous obtenez une référence à un bean, vous ne travaillez pas réellement avec la classe spécifiée dans votre configuration. Au lieu de cela, une classe synthétique vous est présentée qui implémente les interfaces appropriées, délègue les appels et fournit des fonctionnalités supplémentaires (par exemple, votre AOP).

Dans ce cas, vous êtes en appelant directement method2 sur la classe. Si l'instance de cette classe était injectée dans un autre bean en tant que bean Spring, elle serait injectée en tant que proxy. En conséquence, tous les appels de méthode seraient dirigés vers le proxy (et les aspects seraient déclenchés).

Solutions

< p>Pour résoudre ce problème, envisagez les options suivantes :

    <li>Separate method1 and method2 into distinct beans.</li>
    <li>Employ a non-Spring AOP framework.</li>
    Copier après la connexion

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
Article précédent:Comment stocker la date/heure et les horodatages dans le fuseau horaire UTC avec JPA et Hibernate ? Article suivant:Comment fonctionne la méthode `hashCode()` pour les objets non remplacés en Java ?
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
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!