2 votes

Spring AOP ignore certaines méthodes du service Hessian.

J'ai un Aspect avec la définition de pointcut suivante

@Pointcut("execution(public de.company.project..* *(..))")

et une configuration de ressort contenant les éléments suivants

<aop:aspectj-autoproxy />

<bean id="myaspect"
        class="de.company.project.impl.MyAspect" />

<bean id="someService" class="de.company.project.impl.SomeService" />

<bean name="/SomeService"
    class="org.springframework.remoting.caucho.HessianServiceExporter">
    <property name="service" ref="someService" />
    <property name="serviceInterface"
        value="de.company.project.interf.SomeService" />
</bean>

(il y a plusieurs services dans la configuration réelle)

Je vois que l'aspect est invoqué dans certaines méthodes, mais pas dans toutes. Je soupçonne (mais je ne suis pas encore tout à fait sûr) que seules les méthodes déclarées directement dans l'interface sont enveloppées dans l'aspect et que les méthodes déclarées dans une superinterface sont ignorées (bien que cette interface doive correspondre au même raccourci).

Est-ce un comportement attendu ? Comment puis-je le changer ? Que se passe-t-il d'autre ?

2voto

Jens Schauder Points 23468

La réponse est : j'ai raté le modèle de raccourci. Ça ressemble à ça

@Pointcut("execution(public de.company.project..* *(..))")

spécifie le paquetage du type de retour, tandis que ce

@Pointcut("execution(public de.company.project..*(..))")

spécifie le paquetage du type qui possède la méthode.

voir J'ai besoin d'une explication sur les raccourcis de Spring AOP

1voto

Grzegorz Oledzki Points 10491

Juste une supposition. Je n'ai pas de preuve que cela puisse être la raison réelle de votre installation.

Je sais que Spring AOP n'intercepte pas les appels de méthodes locales. C'est-à-dire que le proxy qui est appliqué n'intercepte pas les appels si le même objet appelle sa propre méthode, même si elle correspond à l'expression de la coupe de point.

EDIT : Une autre idée. Êtes-vous sûr que toutes vos instances des classes en question sont du code géré par Spring ? Y a-t-il une chance que certaines portions de votre code (ou une bibliothèque) créent des instances de ces classes sans utiliser Spring ? Si de telles choses se produisent, Spring AOP ne peut pas intercepter de tels beans, car Spring AOP ne s'articule qu'autour des beans gérés par Spring.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X