Tôi đang cố gắng sử dụng Spring AOP với Bộ điều khiển Spring MVC. Tôi có 3 khía cạnh và muốn được theo thứ tự cụ thể. Để làm điều này, tôi sử dụng Ordered giao diện và thực hiện các phương pháp getOrder:Đặt hàng các khía cạnh với Spring AOP && MVC
@Aspect
@Component
public class LoggingAspect implements Ordered{
public int getOrder() {
System.out.println("Abra");
return 1;
}
Adviced lớp:
@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(){}
}
Cấu hình:
<?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>
GetOrder không không làm trò lừa. Tôi sẽ đánh giá cao bất kỳ lời khuyên thực tế nào, hoặc nếu bạn không có câu trả lời chính xác, tôi sẽ đánh giá cao bất kỳ kiến thức lý thuyết nào về Spring Proxy và cơ chế dệt.
Tôi sẽ đăng bất kỳ Mã/Cấu hình nào theo yêu cầu. Cảm ơn bạn đã đọc.
Cập nhật: 1. Tôi đã thử @Order (1) với cùng một kết quả. 2. Tôi cố gắng di chuyển các khía cạnh sang cùng một gói, nó đã thay đổi thứ tự của chúng, nhưng tôi vẫn không thể kiểm soát nó.
Thực ra tôi đã bắt đầu với chú thích @Order, nhưng khi nó không hoạt động, tôi đã cố gắng triển khai giao diện Ordered và thêm System.out để xác minh rằng proxy ít nhất cố gắng đặt hàng các khía cạnh. Nó không hoạt động. –
Sau đó, bạn có vấn đề với cấu hình AOP. Vui lòng xem mã cập nhật của tôi chạy hoàn hảo trong môi trường thử nghiệm của tôi. Đừng quên rằng bạn cần cấu hình loại POintcut và Advice (Xung quanh, trước hoặc sau). –
Tôi xác định đường cắt và các khía cạnh đang hoạt động. Vấn đề là chỉ cần đặt hàng. Bằng cách tôi khuyên trên bộ điều khiển, nó có thể là vấn đề? Có lẽ bạn biết một số cách để gỡ lỗi dệt? –