package com.sunny.core.sunnycore.ssm;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Description: TODO
 * @Author Lg
 * @Date 2022/3/30
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private int age;
    private String sex;
}
package com.sunny.core.sunnycore.ssm;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @Description: TODO
 * @Author Lg
 * @Date 2022/3/30
 */
public class ReflectionTest {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        //获取class对象
        Class aClass = Class.forName("com.sunny.core.sunnycore.ssm.User");

        //获取User对象
        User user1 = (User) aClass.newInstance();
        System.out.println(user1);

        //通过构造器获取对象
        Constructor declaredConstructor = aClass.getDeclaredConstructor(String.class, int.class, String.class);
        User user2 = (User) declaredConstructor.newInstance("Lg", 25, "男");
        System.out.println(user2);

        //通过反射调用方法
        Method setName = aClass.getDeclaredMethod("setName", String.class);
        setName.invoke(user1,"张三");
        System.out.println(user1);
        setName.invoke(user2,"李四");
        System.out.println(user2);

        System.out.println("---------------");
        //通过反射操作属性
        User user3 = (User) aClass.newInstance();
        Field name = aClass.getDeclaredField("name");
        //不能直接操作私有属性,需要关闭程序的安全检测,通过设置setAccessible(true)
        name.setAccessible(true);
        name.set(user3,"王五");
        System.out.println(user3);


    }
}

结果:

 

posted on 2022-03-30 22:51  东北与江南  阅读(25)  评论(0)    收藏  举报