getMethod和getAnnotation

getFields()只能获取public的字段,包括父类的。
而getDeclaredFields()只能获取自己声明的各种字段,包括public,protected,private。

1、

该方法用于取得指定的实体类的实体名称。如果指定的实体类的实体标签定义了名称,则取该名称,否则取类名。

 

例如:有实体类SampleEntity

import javax.persistence.Entity;
  
@Entity(name = "SpecialName")
public class SampleEntity {
  
}
 以SampleEntity类作为参数调用entityName方法:

1、方法中第一行,String entityName = entityClass.getSimpleName();

      变量entityName的值设为类SampleEntity的短名称,即“SampleEntity”。

2、方法中第二行,Entity entity = entityClass.getAnnotation(Entity.class);

      即取得SampleEntity的@Entity标签。

3、方法中第三行到第六行,if(entity.name()!=null&&!"".equals(entity.name()))
                                             {
                                                 entityName = entity.name();

                                             }

      即@Entity标签中定义了name并且name不是空串时, 变量entityName的值设为@Entity标签中name的值,即“SpecialName”。

 4、返回变量entityName,值为“SpecialName”。

 

 

如果SampleEntity的@Entity标签没有定义name

import javax.persistence.Entity;
 
@Entity
public class SampleEntity {
 
}
 

 方法中第三行,if(entity.name()!=null&&!"".equals(entity.name()))条件不成立,最终方法返回变量entityName,值为“SampleEntity”。

 

2、Method getMethod(String name, Class<?>... parameterTypes)  
--返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。  
parameterTypes如:String.class、int.class这些字节码才是Class类的对象
 

也可以此种方式:
Method method = XXX.getClass().getMethod(methodName,new Class[0]);
//getMethod第一个参数是方法名,第二个参数是该方法的参数类型,
//因为存在同方法名不同参数这种情况,所以只有同时指定方法名和参数类型才能唯一确定一个方法  

如一个函数 int Test(int a, String str);
对应的getMethod方法:
1. getMethod("Test",int.class,String.class);
2. getMethod("Test",new Class[]{int.class,String.class});

然后通过invoke来调用此方法

函数原型:Object java.lang.reflect.Method.invoke(Object receiver, Object... args)
    //Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,
    //如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,
    //如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回
    
    receiver:该方法所在类的一个对象
    args: 传入的参数 如 100,“hello”

你可能感兴趣的:(annotation)