问题描述
- 如何得到一个方法上面的注解
-
如题,我自定义了一个注解类 @ AuditAttribute我在java实体类的get方法上面加上这个注解,然后用
Annotation annotation = f.getAnnotation(AuditAttribute.class);
Annotation[] methodAnnotations = method.getAnnotations();
这样来取,不管是取多个还是取一个,取到的总是null 这是为什么?
解决方案
这个是我写的你看看
public class Person {
private String id ;
@Scope("prototype")
public String getId(){
return id ;
}
}
public static void test(Object obj){
Method[] method = obj.getClass().getDeclaredMethods();// 获取所有方法
for (java.lang.reflect.Method m : method) {
System.out.println(m.getName());
if (m.getName().startsWith("get")) {// 取方法名为get...的
if(null != m.getDeclaredAnnotations()){
System.out.println("--111--"+m.getName());
Annotation[] ano = m.getDeclaredAnnotations();
System.out.println("--222--"+ano[0]);
}
public static void main(String[] args) throws NoSuchMethodException, SecurityException{
test(new Person());
}
-------------------------打印结果
getId
--111--getId
--222--@org.springframework.context.annotation.Scope(proxyMode=DEFAULT, value=prototype)
解决方案二:
那是因为你用错了
getDeclaredAnnotations()就可以了
你取这个method的时候使用的是getDeclaredMethod
不是 getMethod吧
这个注解和method的获取是类似的
解决方案三:
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/annotation/AnnotationUtils.html
spring的这个类的源代码,兴许能帮到你哦~
解决方案四:
请问你的问题解决了吗?
解决方案五:
Method[] method = obj.getClass().getMethods();// 获取所有方法
for (java.lang.reflect.Method m : method) {
System.out.println(m.getName());
if (m.getName().startsWith("get")) {// 取方法名为get...的
if(null != m.getAnnotation(AuditAttribute.class)){
System.out.println("--111--"+m.getName());
} if(null != m.getDeclaredAnnotations()){
System.out.println("--111--"+m.getName()); }
Object value = m.invoke(obj);// 执行
String fildName = m.getName(); beanMap.put(fildName, value); } }