Considérez le code suivant dans ABC.java :
<code class="java">public void method1() { // ... method2(); // ... } public void method2() { // ... // ... }</code>
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>
Cependant, l'aspect, checkAccess, n'est pas invoqué lorsque la méthode2 est appelée. Qu'est-ce qui manque ?
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 :
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!