我想找出所有被注解为@Versioned的Spring bean中的类/方法。
我创建了自定义注解,如下所示:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Versioned {
.....
}
当我使用Java反射查找方法时,此注释表现完美:
for(Method m: obj.getClass().getMethods()){
if(m.isAnnotationPresent(Versioned.class)){
.... // Do something
}
但是当我访问Spring beans并尝试类似的检查时它无法工作:
public class VersionScanner implements ApplicationContextAware{
public void setApplicationContext(ApplicationContext applicationContext){
for(String beanName: applicationContext.getBeanDefinitionNames()){
for(Method m: applicationContext.getBean(beanName).getClass().getDeclaredMethods()){
if(m.isAnnotationPresent(Versioned.class){
// This is not WORKING as expected for any beans with method annotated
}
}
}
}
}
事实上,这段代码确实可以找到其他注解,比如@RequestMapping。我不确定我在自定义注解方面做错了什么。