2012-02-03 82 views
10

任何人都可以解釋我需要做什麼來實現我自己的註釋,將添加功能到我的Web請求?如何將自定義註釋添加到Spring MVC?

例如:

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

這裏@RequiresSomeSpecialHandling將是我自己的批註,導致一些特殊的工作之前或給定Web請求/abc後完成。

我知道,在一個很高的水平,我需要寫一個bean後置處理器,掃描類我的註釋,並在必要時注入自定義MVC攔截器。但是有沒有簡化這項任務的捷徑?特別是對於上面的兩個例子。

由於提前,

+1

BTW:如果「@RequiresAuth」僅僅是一個例子,那麼它是好的,但不要重新春季安全 – Ralph 2012-02-03 11:02:24

+0

這只是一個例子 - 編輯我的帖子讓這個例子更通用。 – rustyx 2012-02-03 20:34:31

回答

2

取決於你想要做的@RequiresSomeSpecialHandling的結果是什麼。例如。你想要它影響請求映射還是調用方法(即解析方法參數,處理返回值)?

在春季3.1註解類的支持變得更加個性化。您可以在this repo中瀏覽一些示例。

也請記住,在春季3.1的HandlerInterceptor可以投的處理對象HandlerMethod,使您可以訪問到準確的方法,包括它的註解。這可能足以滿足你需要做的事情。

4

這種註釋,(即調用方法時添加額外的功能)看起來像觸發AOP通知註解。

@see春Reference Chapter 7. Aspect Oriented Programming with Spring


的想法是使用註釋來觸發AOP建議。

喜歡:

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

謝謝。是的,AOP在我的列表中,但我想嘗試進行註釋並重新使用盡可能多的MVC功能。 – rustyx 2012-02-03 10:31:57

+0

@rustyx:是的,這是背後的思想:使用註釋觸發AOP建議,請參閱我的回答擴展來說明它。 – Ralph 2012-02-03 11:01:30

+0

我發現'@ annotation'在編寫切入點表達式時很有用。 – 2012-02-03 16:01:52

-2

如果緩存是您的目標之一,看看在@Cacheable註釋(和它的兄弟姐妹@CachePut@CacheEvict@Caching),可作爲春季3.1。

+0

對不起,您的回答對我來說是無用的。在我的例子中,@NoCache註解是關於HTTP no-cache,而不是方法緩存的,它只是一個例子。 – rustyx 2012-02-03 20:37:48

相關問題