Из-за аннотации @PreAuthorize
вы получаете не фактический класс, а прокси-экземпляр этого класса.Так как аннотации не наследуются (по замыслу на языке), вы их не увидите.
Я предлагаю сделать 2 вещи: во-первых, используйте AopProxyUtils.ultimateTargetClass
, чтобы получить фактический класс компонента, а во-вторых, используйте AnnotationUtils
, чтобы получить аннотацию из класса.
Map<String, Object> beans = appContext.getBeansWithAnnotation(RestController.class);
for (Map.Entry<String, Object> entry : beans.entrySet()) {
Class clazz = AopProxyUtils. AopProxyUtils.ultimateTargetClass(entry.getValue());
ReflectionUtils.doWithMethods(clazz, new MethodCallback() {
public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
Annotation[] annotations = AnnotationUtils.getAnnotations(method);
for(Annotation annotation : annotations) {
LOG.debug("Annotation: " + annotation);
}
}
});
}
Что-то подобное должно помочь, а также некоторая очистка с использованием служебных классов, предоставляемых Spring.