Как добавить пользовательскую аннотацию к 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.