Tengo un proyecto que consiste en dos sub-proyectos que son ambos proyectos de primavera y tienen un applicationContext.xml cada uno.Aspecto primavera no ejecuta cuando se define en otra JAR
Uno es un proyecto de framework (que termina como un JAR) y el otro es la aplicación real (que termina en WAR y depende del JAR e importa el applicationContext.xml del JAR en su propia applicationContext.xml).
En el marco del proyecto, he definido un aspecto para todos los métodos públicos.
@Aspect
@Configurable
public class MyAspect {
@Autowired
private SomeBean mBean;
@Pointcut("execution(public * *(..))")
public void anyPublicMethod() {
}
@Before("anyPublicMethod()")
public void checkAuthorization(JoinPoint pJoinPoint) {
mBean.doSomething();
}
}
Y He activado el AOP en el applicationContext.xml del marco (que es importado por el applicationContext.xml del proyecto de aplicación real).
...
<context:spring-configured />
<context:component-scan base-package="com.mypackage" />
<aop:aspectj-autoproxy/>
...
Cuando se prueba en el proyecto de la estructura, el aspecto es ejecutado como se esperaba cuando se llama a los métodos públicos en los granos de la primavera.
Como se indicó anteriormente, el proyecto marco se incluye en el proyecto de aplicación como dependencia pero el aspecto no se ejecuta cuando se llama a métodos de emparejamiento (cualquier públicas) en el proyecto de aplicación en cualquier granos de primavera.
También he intentado usar la configuración de XML del aspecto. Eso lleva al mismo comportamiento.
Habilitar el AOP en el contexto de la aplicación no solucionó el problema. – tobiasbayer
También he leído que el autoprocesamiento de primavera solo se aplica a los granos administrados por resorte, que no es configurable. Intente marcarlo como componente por favor? Ref - 7.2.2 Declarar un aspecto http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/aop.html – MikePatel
Creo que aquí confundes la aplicación de un aspecto con su definición. La documentación dice que un aspecto solo se puede aplicar __applied__ a un Spring Bean. Eso no tiene nada que ver con la declaración del aspecto en sí. Incluso debe funcionar solo con '' @ Aspect'' (sin '' @ Configurable'' o '' @ Component''). En mi ejemplo, el aspecto es '' @ Configurable'' además debido al campo '' @ Autowired'' para ser inyectado. – tobiasbayer