Как добавить пользовательскую аннотацию в Spring MVC? - PullRequest
10 голосов
/ 03 февраля 2012

Может кто-нибудь объяснить, что мне нужно сделать, чтобы реализовать мою собственную аннотацию, которая добавила бы функциональность моим веб-запросам?

Например:

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

Здесь @RequiresSomeSpecialHandling будет моей собственной аннотацией, которая заставляет выполнять некоторую специальную работу до или после данного веб-запроса /abc.

Я знаю, что на очень высоком уровне мне нужно было бы написать постпроцессор бина, отсканировать классы для моих аннотаций и ввести собственные перехватчики mvc при необходимости. Но есть ли какие-нибудь ярлыки для упрощения этой задачи? Специально для двух приведенных выше примеров.

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

Ответы [ 3 ]

4 голосов
/ 03 февраля 2012

Этот вид аннотаций (которые добавляют дополнительные функциональные возможности при вызове метода) выглядит как аннотации, запускающие рекомендацию AOP.

@ см. Spring Справочная глава 7. Аспектно-ориентированное программирование с помощью Spring


Идея состоит в том, чтобы использовать аннотацию для запуска AOP Advice.

вроде:

@Pointcut("@target(com.example.RequiresAuth)")
2 голосов
/ 14 февраля 2012

Зависит от того, что вы хотите сделать в результате @RequiresSomeSpecialHandling. Например. Вы хотите, чтобы это влияло на отображения запроса или вызов метода (то есть, разрешение аргументов метода, обработка возвращаемого значения)?

Поддержка аннотированных классов в Spring 3.1 стала намного более настраиваемой. Вы можете просмотреть некоторые примеры в этом репо .

Также имейте в виду, что HandlerInterceptor в Spring 3.1 может привести объект-обработчик к HandlerMethod, что дает вам доступ к точному методу, включая его аннотации. Этого может быть достаточно для того, что вам нужно сделать.

0 голосов
/ 03 февраля 2012

Если кэширование является одной из ваших целей, взгляните на аннотацию @ Cacheable (и ее родные элементы @CachePut, @CacheEvict и @Caching), доступные начиная с Spring 3.1. *

...