Estoy intentando usar Spring AOP con Spring MVC Controller. Tengo 3 aspectos, y quiero que estén en orden específico. Con el fin de hacer esto, yo uso la interfaz ordenados y poner en práctica el método getOrder:Aspectos de pedido con Spring AOP && MVC
@Aspect
@Component
public class LoggingAspect implements Ordered{
public int getOrder() {
System.out.println("Abra");
return 1;
}
aconsejó clase:
@Component
@Controller
public class HomeController {
pointcuts:
@Aspect
public class SystemArchitecture {
@Pointcut("execution (* com.jajah.StorageManager.HomeController.*(..))")
public void inHomeController(){}
@Pointcut("execution (* com.jajah.StorageManager.HomeController.*(..))")
public void loggable(){}
@Pointcut("execution (* com.jajah.StorageManager.HomeController.*(..))")
public void authenticated(){}
}
Configuración:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<annotation-driven />
<context:annotation-config />
<aop:aspectj-autoproxy proxy-target-class="false"/>
<beans:bean id="AuthenticationAspect" class="com.jajah.CommonAspects.SecurityAspects.OAuthAspect"/>
<beans:bean id="ErrorHandlingAspect" class="com.jajah.StorageManager.Aspects.ErrorHandlingAspect"/>
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<!-- <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean> -->
<beans:bean name="homeController" class="com.jajah.StorageManager.HomeController">
<beans:constructor-arg>
<beans:ref bean="CloudStorage"/>
</beans:constructor-arg>
<beans:constructor-arg>
<beans:ref bean="ConfigurationContainer"/>
</beans:constructor-arg>
</beans:bean>
<beans:bean id="CloudStorage" name="CloudStorage" class="com.jajah.StorageManager.CloudStorageProxy" scope="singleton">
<beans:constructor-arg>
<beans:ref bean="ConfigurationContainer"/>
</beans:constructor-arg>
</beans:bean>
<beans:bean id ="ConfigurationContainer" class="com.jajah.StorageManager.ConfigurationContainer" scope="singleton"/>
</beans:beans>
El getOrder doesn No hagas el truco. Agradeceré cualquier consejo práctico, o si no tiene la respuesta exacta agradeceré cualquier conocimiento teórico sobre Spring Proxy y el mecanismo de tejido.
Voy a publicar cualquier código/configuración requerida a pedido. Gracias por leer.
Actualización: 1. Intenté @Order (1) con el mismo resultado. 2. Traté de mover aspectos al mismo paquete, cambió su orden, pero aún así no pude controlarlo.
En realidad comencé con la anotación @Order, pero cuando no funcionó intenté implementar la interfaz ordenada y agregué System.out para verificar que el proxy al menos trata de ordenar aspectos. No funcionó. –
Luego tiene el problema con la configuración de AOP. Por favor, mira mi código actualizado que funciona perfecto en mi entorno de prueba. No olvide que debe configurar el tipo de corte y sugerencia (alrededor, antes o después). –
Defino pointcut, y los aspectos funcionan. El problema es simplemente ordenar. Por cierto, yo aconsejo sobre el controlador, ¿puede ser el problema? ¿Quizás conozcas alguna forma de depurar el tejido? –