2009-11-06 16 views
3

je la configuration suivante:Spring - Aspect ne s'applique à l'exécution


@Aspect 
public class MyAspect { 

@Around(@annotation(SomeAnnotation)) 
public Object myMethod(ProceedingJoinPoint joinPoint) throws Throwable { 
    System.out.println("Hello..."); 
} 
} 

et ont les définitions des haricots suivants:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> 
    <bean id="myAspect" class="MyAspect" /> 
</beans> 

Je vois que le comportement ne s'applique à @SomeAnnotation méthode annotée à l'exécution. Une idée pourquoi?

Thx.

Répondre

2

Assurez-vous que la classe avec @SomeAnnoation est créée par le conteneur Spring. Spring applique AOP aux classes extraites du conteneur en créant une classe proxy pour envelopper l'objet. Cette classe proxy exécute ensuite l'Aspect avant et après que des méthodes sur cet objet sont appelées.

Si vous n'êtes pas sûr, essayez de déboguer là où vous utilisez la classe. Vous devriez voir que l'objet n'est pas une instance de votre classe mais un objet proxy.

+0

+1 pour le débogage - bon contrôle de santé mentale. – ChssPly76

2

Avez-vous enabled AspectJ support?

Vous devez ajouter

<aop:aspectj-autoproxy/> 

à votre contexte de haricot.

+0

Oui, j'ai ... J'ai un fichier de définition de bean supplémentaire dans le DAO où je fais ce truc .. Bien que le code que j'ai posté est du calque Service. Dois-je réexécuter le proxy automatique ?? – peakit

+0

Pour autant que je sache, cela doit être fait par contexte. Donc, à moins que l'autre fichier ** inclus ** dans celui-ci (ou vice versa) OU que vous utilisiez des contextes hiérarchiques et que ce fichier soit ** supérieur ** dans la hiérarchie alors l'autre, vous devez réexécuter le proxy automatique. – ChssPly76

+0

Oui, les deux fichiers viennent finalement dans le même 'contexte de printemps'. Et même j'ai essayé d'ajouter le créateur de proxy automatique, cela n'a pas aidé .. Je ne vois toujours pas de comportement à appliquer. – peakit