Почему (Spring 3) метод HandlerMethodResolver # init () находит аннотации к методам класса Object? - PullRequest
1 голос
/ 10 июня 2010

Я играл с моим первым приложением на основе SpringMVC ..... (3.0.2.RELEASE)

Я заметил, что AnnotationMethodHandlerAdapter вызывает конструктор ServletHandlerMethodResolver, а этот конструктор вызывает метод init () HandlerMethodResolver.

public void init(Class<?> handlerType) {
    Class<?>[] handlerTypes =
            Proxy.isProxyClass(handlerType) ? handlerType.getInterfaces() : new Class<?>[] {handlerType};
    for (final Class<?> currentHandlerType : handlerTypes) {
        ReflectionUtils.doWithMethods(currentHandlerType, new ReflectionUtils.MethodCallback() {
            public void doWith(Method method) {
                Method specificMethod = ClassUtils.getMostSpecificMethod(method, currentHandlerType);
                if (isHandlerMethod(method)) {
                    handlerMethods.add(specificMethod);
                }
                else if (method.isAnnotationPresent(InitBinder.class)) {
                    initBinderMethods.add(specificMethod);
                }
                else if (method.isAnnotationPresent(ModelAttribute.class)) {
                    modelAttributeMethods.add(specificMethod);
                }
            }
        }, ReflectionUtils.NON_BRIDGED_METHODS);
    }

Примечание. В моем случае Proxy.isProxyClass (handlerType) возвращает значение false.

Этот метод init () (с помощью ReflectionUtils.doWithMethods ()) находит аннотации @RequestMapping, @InitBinder и @ModelAttribute для методов - указанный класс А - все его суперклассы , включая класс объектов !!!

Мы не должны (и не можем) «ставить» такие аннотации на методы класса Object. Итак, почему init () сканирует методы класса Object? Пожалуйста, уточните!

Обратная ссылка

  • SE

1 Ответ

0 голосов
/ 09 июля 2010

Попробуйте продлить общую функциональность, и вы поймете, почему.

@Controller
public class IndexController extends CommonFuncionality {

    // impl goes here

}

Где CommonFuncionality содержит материалы Spring-MVC, такие как @InitBinder, @ModelAttribute и т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...