Ich habe ein Projekt, bestehend aus zwei Teilprojekten, die beide Spring-Projekte sind und jeweils eine applicationContext.xml.Spring Aspekt nicht ausgeführt, wenn in anderen JAR definiert
Eines ist ein Framework-Projekt (das als JAR endet) und eines ist die eigentliche Anwendung (die als WAR endet und vom JAR abhängt und die applicationContext.xml der JAR in ihre eigene applicationContext.xml importiert).
Im Framework-Projekt habe ich einen Aspekt für alle öffentlichen Methoden definiert.
@Aspect
@Configurable
public class MyAspect {
@Autowired
private SomeBean mBean;
@Pointcut("execution(public * *(..))")
public void anyPublicMethod() {
}
@Before("anyPublicMethod()")
public void checkAuthorization(JoinPoint pJoinPoint) {
mBean.doSomething();
}
}
Und ich habe in der applicationContext.xml des Rahmens AOP aktiviert (die durch die applicationContext.xml des eigentlichen Anwendungsprojekt importiert wird).
Beim Testen im Framework-Projekt wird der Aspekt wie erwartet ausgeführt, wenn öffentliche Methoden für Spring-Beans aufgerufen werden.
Wie oben erwähnt, wird das Framework-Projekt als Abhängigkeit in das Anwendungsprojekt aufgenommen, aber der Aspekt wird nicht ausgeführt, wenn im Anwendungsprojekt auf Spring-Beans passende Methoden (beliebige öffentliche) aufgerufen werden.
Ich habe auch versucht, XML-Konfiguration des Aspekts zu verwenden. Das führt zu demselben Verhalten.
Durch Aktivieren von AOP im Anwendungskontext wurde das Problem nicht behoben. – tobiasbayer
Ich habe auch gelesen, dass Frühling Autoproxying gilt nur für Frühjahr Bohnen, die konfigurierbar ist nicht. Bitte markieren Sie es als Komponente bitte? Ref - 7.2.2 Einen Aspekt deklarieren http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/aop.html – MikePatel
Ich glaube, Sie verwechseln die Anwendung eines Aspekts mit seiner Definition hier. Die Dokumentation besagt, dass ein Aspekt nur auf eine Spring Bean angewendet werden kann. Das hat nichts mit der Erklärung des Aspekts selbst zu tun. Es muss sogar funktionieren, indem man '' Aspect'' verwendet (ohne '' Configurable'' oder '' @ Component''). In meinem Beispiel ist der Aspekt zusätzlich "@ Configurable", weil das Feld "@ Autowired" injiziert wird. – tobiasbayer