Как добавить пользовательскую аннотацию к Spring MVC?

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

Например:

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

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

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

Спасибо заранее,

Ответ 1

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

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

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

Ответ 2

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

@see Spring Ссылка Глава 7. Аспектно-ориентированное программирование с Spring


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

как:

@Pointcut("@target(com.example.RequiresAuth)")

Ответ 3

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