Я играл с моим первым приложением на основе 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? Пожалуйста, уточните!
Обратная ссылка