在Spring MVC中,在Controller类中,使用@RequestMapping
注释注释的方法允许Flexible Method Signature
。
如果我想用我自己的custom annotation
做这样的事情,有人可以给我一些指示。
先谢谢。
答案 0 :(得分:1)
Spring MVC在这方面有一些很多的功能,因此可能更容易将其他地方作为起点。 Spring 4中引入的新消息抽象具有类似的功能。
查看@MessageMapping
,它允许您针对Message
实例构建灵活的签名。例如,您可以注入消息的标题
public void foo(@Header("myHeader") int myHeader)
或者您可以针对Validator
public void bar(@Payload @Validated Order order)
基础架构的核心位于InvocableHandlerMethod
,它将根据传入的java.lang.reflect.Method
和您可能提供的其他参数调用您在给定Bean实例上提供的Message
(见public final Object invoke(Message<?> message, Object... providedArgs)
要创建该实例,您需要提供一组HandlerMethodArgumentResolver
。每个HandlerMethodArgumentResolver
负责处理方法参数。简而言之,这基本上将为您提供MethodParameter
实例(即对您要处理的方法的参数的引用,例如上一个示例中带注释的order
)并且您将要去告诉你是否支持它,当你这样做时,处理该参数以便注入正确的值。对于标头示例,实现将查找注释上具有名称的标头。简单!
例如在SimpAnnotationMethodMessageHandler
中创建一组默认解析器(查看initArgumentResolvers
)。这将向您展示默认情况下可以注入的参数类型。通过扩展该列表(或提供自定义实例),您可以扩充用户可以在方法签名中使用的内容。
在Spring 4.1中,我们依靠此基础结构来提供JMS侦听器带注释的端点,并且这些端点也可以具有灵活的签名。它是actually already implemented所以你可能想看看另一个例子。