2012-02-03 36 views
10

Bất cứ ai có thể giải thích những gì tôi cần làm để thực hiện chú thích của riêng tôi có thể thêm chức năng vào các yêu cầu web của tôi không?Cách thêm chú thích tùy chỉnh vào Spring MVC?

Ví dụ:

@Controller 
public class MyController { 
    @RequestMapping("/abc") 
    @RequiresSomeSpecialHandling 
    public void handleSecureRequest() { 
    } 
} 

đây @RequiresSomeSpecialHandling sẽ là chú thích của riêng tôi mà gây ra một số công việc đặc biệt để được thực hiện trước hoặc sau khi yêu cầu web nhất định /abc.

Tôi biết rằng ở mức độ rất cao, tôi sẽ cần viết trình xử lý bài đăng hạt, quét lớp học cho chú thích của tôi và tiêm các trình chặn xen kẽ tùy chỉnh khi cần. Nhưng có bất kỳ phím tắt nào để đơn giản hóa tác vụ này không? Đặc biệt đối với hai ví dụ trên.

Cảm ơn trước,

+1

BTW: Nếu "@RequiresAuth" chỉ là một ví dụ, thì tốt, nhưng không tái tạo lại bảo mật mùa xuân – Ralph

+0

Đó chỉ là một ví dụ - đã chỉnh sửa bài đăng của tôi để làm ví dụ chung chung hơn. – rustyx

Trả lời

2

Phụ thuộc vào những gì bạn muốn làm là kết quả của @RequiresSomeSpecialHandling. Ví dụ. bạn có muốn nó ảnh hưởng đến ánh xạ yêu cầu hoặc yêu cầu phương thức (tức là đối số phương pháp giải quyết, xử lý giá trị trả về) không?

Hỗ trợ cho các lớp chú thích trong Spring 3.1 trở nên có thể tùy chỉnh nhiều hơn. Bạn có thể duyệt một số ví dụ trong this repo.

Cũng xin lưu ý rằng trình xử lý HandlerInterceptor trong Spring 3.1 có thể truyền đối tượng Trình xử lý cho HandlerMethod, cho phép bạn truy cập vào phương thức chính xác bao gồm chú thích của nó. Điều đó có thể là đủ cho những gì bạn cần làm.

4

Đây là loại chú thích, (mà thêm chức năng bổ sung khi gọi một phương pháp) trông giống như chú thích rằng kích hoạt Tư vấn AOP.

@see Xuân Reference Chapter 7. Aspect Oriented Programming with Spring


Ý tưởng là để sử dụng chú thích để kích hoạt các Tư vấn AOP.

thích:

@Pointcut("@target(com.example.RequiresAuth)") 
+0

Cảm ơn. Có, AOP nằm trong danh sách của tôi, nhưng tôi muốn cố gắng tạo chú thích và sử dụng lại càng nhiều cơ sở MVC càng tốt. – rustyx

+0

@rustyx: Vâng, đó là ý tưởng đằng sau: sử dụng chú thích để kích hoạt lời khuyên AOP, xem câu trả lời mở rộng của tôi để minh họa cho nó. – Ralph

+0

Tôi thấy '@ annotation' hữu ích khi viết các biểu thức đường cắt. –

-2

Nếu bộ nhớ đệm là một trong những mục tiêu của mình, hãy nhìn vào các @Cacheable chú thích (và anh chị em của nó @CachePut, @CacheEvict@Caching), có sẵn như là xuân 3.1.

+0

Xin lỗi, câu trả lời của bạn là vô dụng đối với tôi. Chú thích @NoCache trong ví dụ của tôi là về HTTP no-cache, không phải là cache của phương thức, và nó chỉ là một ví dụ. – rustyx

Các vấn đề liên quan