簡體   English   中英

使用Spring創建支持靈活方法簽名的自定義注釋

[英]Creating Custom Annotation Using Spring that supports Flexible Method Signature

在Spring MVC的Controller類內部,允許使用@RequestMapping注釋進行注釋的方法具有Flexible Method Signature

如果我想使用自己的custom annotation執行類似的操作,可以有人給我一些相同的指針。

提前致謝。

Spring MVC在這方面具有很多功能,因此將其他地方作為起點可能更容易。 Spring 4中引入的新消息傳遞抽象具有類似的功能。

查看@MessageMapping ,它使您可以針對Message實例構建靈活的簽名。 例如,您可以注入消息的標題

public void foo(@Header("myHeader") int myHeader)

或者您可以根據Validator有效負載

public void bar(@Payload @Validated Order order)

基礎結構的核心位於InvocableHandlerMethod ,它將基於傳入的Message和您可能提供的其他參數來調用給定bean實例上提供的java.lang.reflect.Method (請參閱public final Object invoke(Message<?> message, Object... providedArgs)

要創建該實例,您需要提供一組HandlerMethodArgumentResolver 每個HandlerMethodArgumentResolver都負責處理方法參數。 簡而言之,基本上是要為您提供一個MethodParameter實例(即對您要處理的方法的參數的引用,例如上一個示例中的帶注釋的order ),並且您將要知道是否支持它然后,處理該參數,以便注入正確的值。 對於標頭示例,實現將在標頭上查找具有名稱的標頭。 簡單!

例如,在SimpAnnotationMethodMessageHandler中創建了一組默認解析器(請initArgumentResolvers )。 這將向您顯示默認情況下可以在其中注入的參數類型。 通過擴展該列表(或提供自定義實例),您可以擴展用戶可以在方法簽名中使用的內容。

在Spring 4.1中,我們依靠此基礎結構來提供JMS偵聽器注釋的端點,這些端點也可能具有靈活的簽名。 實際上已經實現了,因此您可能想看看另一個示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM