Я объявил свои аспекты с помощью аннотации @Aspect, но совет, похоже, не применяется.Этот аспект работает в нескольких других проектах, которые у меня есть, и ключевое отличие, по-видимому, заключается в том, что другие проекты полностью связаны с использованием аннотаций, и этот конкретный проект является проводным XML.Единственный компонент, который связан с аннотацией, - это Aspect.Поэтому мне интересно, поддерживает ли Spring aspectj, когда при использовании aspectj-autoproxy чувствителен порядок, в котором bean-компоненты определены в xml.
Например, будут ли бины, объявленные после aspectj-autoproxy в xml, рассматриваться для AOPpointcuts?
РЕДАКТИРОВАТЬ:
Я перемещал <aop:aspectj-autoproxy />
до тех пор, пока все бины не созданы, и все еще не повезло.
В основном мой код состоит из:
@Component
@Aspect
public class SomeAspect {
@Pointcut("@annotation(MyAnnotation)")
public void isX() {}
@After("isX()")
public void XX() {
System.out.println("Called aspect");
}
}
И у моего контроллера есть что-то вроде:
public class XController extends AbstractCommandController {
@MyAnnotation
public void handleX(...) {
// do stuff
}
@Override
protected void handle(...) {
return handleX(...);
}
}
А потом xml пружины:
<context:component-scan base-package="package.of.some.aspect" />
<aop:aspectj-autoproxy />
<!-- the rest of the beans below -->
<bean id="someController" class="..." />
Мои предыдущие проекты захватили и загрузили все bean-компоненты через компонентное сканирование.На этот раз все по-другому.
EDIT2: Другое отличие состоит в том, что другие проекты используют @Controller и @RequestMethod.И в этом случае я использую производный класс AbstractCommmandController.Мне интересно, если это применимо: http://forum.springsource.org/archive/index.php/t-46637.html
А именно, что я не могу применить совет к любому методу, кроме handleRequest ().
EDIT3:
Моя последняя попыткаэто переопределить handleRequest () и применить мою аннотацию там.Предполагается, что когда Spring проксирует мой контроллер, он увидит аннотацию и применит совет, так как он вызывает через открытый, вызываемый извне метод.Это все еще не работает.