1.获取反射的三种方法
User user = new User();
Class<User> c = User.class;
Class<? extends User> aClass = user.getClass();
Class<?> user1 = Class.forName("com.atguigu.huawei.entity.User");
2.实体属性DeclaredFields
// 获取实体所有属性的值
User u = new User();
Class<User> clasz= User.class;
Field[] declaredFields = clasz.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println(field.get(u).toString());
}
//给实体的属性设值
User user = new User();
Class<User> clasz= User.class;
Field field = clasz.getDeclaredField("idcard");
//放开私有属性可以设值
field.setAccessible(true);
field.set(user,"432522199707245733");
System.out.println(user.getIdcard());
3.给实体的方法设置
User user = new User();
Class<User> clasz= User.class;
//第一个为方法名,第二个参数一定要对应参数类型传入
Method method = clasz.getDeclaredMethod("setIdcard", String.class);
method.setAccessible(true);
method.invoke(user,"432522199707245773");
System.out.println(user.getIdcard());
4.自定义一个注解UserData 给Person赋值
public class test {
public static void main(String[] args) throws Exception {
Person person = new Person();
Class<? extends Person> aClass = person.getClass();
Field[] declaredFields = aClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
if(declaredField.isAnnotationPresent(UserData.class)){
UserData annotation = declaredField.getAnnotation(UserData.class);
int age = annotation.age();
String sex = annotation.sex();
declaredField.setAccessible(true);
if(age != 0){
declaredField.set(person,age);
}
if(!"".equals(sex)){
declaredField.set(person,sex);
}
}
}
System.out.println(person);
}
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface UserData {
int age() default 0;
String sex() default "";
}
@Data
static class Person {
@UserData(age = 11)
private int age;
@UserData(sex = "女")
private String sex;
}
}