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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 16:54:30264parcourir

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>
<pre class="brush:php;toolbar:false">method2();

}

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>
<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>


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>

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!

Déclaration:
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