J'ai déclaré mes aspects en utilisant l'annotation @Aspect, mais le conseil ne semble pas s'appliquer. L'aspect fonctionne dans quelques autres projets que j'ai, et la différence clé semble être que les autres projets sont complètement câblés en utilisant des annotations, et ce projet particulier est xml filaire. Le seul bean qui est annoté est l'aspect. Je me demande donc si le support d'aspectj de spring, en utilisant aspectj-autoproxy est sensible à l'ordre que les beans sont définis dans le xml. Par exemple, est-ce que les beans seront déclarés après l'aspectj-autoproxy dans xml pour les coupes AOP?aspectj et spring avec aspectj-autoproxy
EDIT:
je me suis déplacé le <aop:aspectj-autoproxy />
jusqu'à ce que tous les haricots sont créés et toujours pas de chance.
Fondamentalement, mon code se compose de:
@Component
@Aspect
public class SomeAspect {
@Pointcut("@annotation(MyAnnotation)")
public void isX() {}
@After("isX()")
public void XX() {
System.out.println("Called aspect");
}
}
Et mon contrôleur a quelque chose comme:
public class XController extends AbstractCommandController {
@MyAnnotation
public void handleX(...) {
// do stuff
}
@Override
protected void handle(...) {
return handleX(...);
}
}
Et puis le xml du printemps est:
<context:component-scan base-package="package.of.some.aspect" />
<aop:aspectj-autoproxy />
<!-- the rest of the beans below -->
<bean id="someController" class="..." />
Mes projets précédents capturés et chargé tous les haricots via le composant-scan. C'est ce qui est différent cette fois.
EDIT2: L'autre différence est que les autres projets utilisent @Controller et @RequestMethod. Et dans ce cas j'utilise une classe dérivée de AbstractCommmandController. Je me demande si cela s'applique: http://forum.springsource.org/archive/index.php/t-46637.html
À savoir que je ne peux pas appliquer de conseils à une méthode sauf handleRequest().
EDIT3:
Mon dernier essai est de passer outre handleRequest() et y appliquer mon annotation. En supposant que lorsque le printemps transmettra mon contrôleur à son contrôleur, celui-ci verra l'annotation et appliquera le conseil, car il appelle la méthode publique appelée externe. Cela ne fonctionne toujours pas.
Publiez du code s'il vous plaît; par exemple. l'appcontext qui définit l'aspect, le conseil et le pointcut (s). – abalogh
@abalogh: J'ai l'impression que si je simplifie le code, cela fonctionnera. Quelle est la meilleure façon d'aborder le débogage aspectj/spring quand ce truc ne fonctionne pas comme prévu? – Kevin