Создание пользовательской аннотации с использованием Spring, который поддерживает гибкую подпись метода

1

В Spring MVC, внутри класса Controller, метод, аннотированный аннотацией @RequestMapping имеет возможность иметь Flexible Method Signature.

Если я хочу сделать что-то подобное с помощью моей собственной custom annotation, может ли кто-нибудь дать мне несколько указателей на то же самое.

Заранее спасибо.

Теги:
spring

1 ответ

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 вы предоставили в данном экземпляре компонента, на основе входящего Message и дополнительных параметров, которые вы можете предоставить (см. public final Object invoke(Message<?> message, Object... providedArgs)

Чтобы создать этот экземпляр, вам необходимо предоставить набор HandlerMethodArgumentResolver. Каждый HandlerMethodArgumentResolver отвечает за обработку параметра метода. Короче говоря, это в основном будет предоставлять вам экземпляр MethodParameter (то есть ссылку на параметр метода, который вы хотите обработать, например аннотированный order в последнем примере), и вы скажете, поддерживаете ли вы его или нет и когда вы это сделаете, обрабатывайте этот параметр так, чтобы вводилось правильное значение. Для примера заголовка реализация ищет заголовок с именем в аннотации. Просто!

Набор SimpAnnotationMethodMessageHandler по умолчанию создается, например, в SimpAnnotationMethodMessageHandler (смотрите initArgumentResolvers). Это покажет вам параметры, которые вы можете ввести там по умолчанию. Расширяя этот список (или предоставляя настраиваемые экземпляры), вы можете увеличить то, что пользователь может использовать в сигнатуре метода.

Весной 4.1 мы полагаемся на эту инфраструктуру для предоставления аннотированных конечных точек прослушивателя JMS, и эти конечные точки также могут иметь гибкую подпись. На самом деле это уже реализовано, поэтому вы можете взглянуть на это еще на одном примере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню