[英]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.