Deklarowałem moje aspekty za pomocą adnotacji @Aspect, ale porady nie wydają się być stosowane. Aspekt ten działa w kilku innych projektach, które mam, a kluczową różnicą wydaje się być to, że inne projekty są całkowicie połączone za pomocą adnotacji, a ten konkretny projekt jest przewodowy. Jedynym komponentem, który jest opatrzony adnotacją, jest aspekt. Zastanawiam się więc, czy obsługa aspectj wiosenna, przy użyciu aspectj-autoproxy jest wrażliwa na kolejność definiowania ziaren w xml.aspectj i sprężyna z aspectj-autoproxy
Na przykład, czy fasole zadeklarowane po aspekcie aspectj-autoproxy w xml będą brane pod uwagę w punktach AOP?
EDIT:
przeniosłem <aop:aspectj-autoproxy />
aż po wszystkie ziarna są tworzone i nadal nie ma szczęścia.
Zasadniczo mój kod składa się z:
@Component
@Aspect
public class SomeAspect {
@Pointcut("@annotation(MyAnnotation)")
public void isX() {}
@After("isX()")
public void XX() {
System.out.println("Called aspect");
}
}
A mój kontroler ma coś takiego:
public class XController extends AbstractCommandController {
@MyAnnotation
public void handleX(...) {
// do stuff
}
@Override
protected void handle(...) {
return handleX(...);
}
}
A potem xml wiosną jest: schwytany
<context:component-scan base-package="package.of.some.aspect" />
<aop:aspectj-autoproxy />
<!-- the rest of the beans below -->
<bean id="someController" class="..." />
Moje poprzednie projekty i załadował wszystkie ziarna poprzez skanowanie składników. Tym razem jest inaczej.
EDIT2: Inna różnica polega na tym, że inne projekty używają @Controller i @RequestMethod. I w tym przypadku używam klasy pochodnej AbstractCommmandController. Zastanawiam się, czy to dotyczy: http://forum.springsource.org/archive/index.php/t-46637.html
Mianowicie, nie mogę zastosować porady do żadnej metody z wyjątkiem handleRequest().
Edit3:
Moja ostatnia próba jest przesłonić handleRequest() i zastosować tam mój adnotacji. Przy założeniu, że kiedy wiosną prokuruje mój kontroler, zobaczy adnotację i zastosuje radę, ponieważ odwołuje się publicznie, zewnętrznie nazywaną metodą. To nadal nie działa.
Napisz kod; na przykład appcontext, który definiuje aspekt, poradę i pointcut (s). – abalogh
@abalogh: Mam wrażenie, że upraszczam kod, który zadziała. Jaki jest najlepszy sposób debugowania aspektj/wiosna, gdy te rzeczy nie działają zgodnie z oczekiwaniami? – Kevin