Skip to content

Java 反射机制

TIP

反射(Reflection)允许程序在运行时获取类的内部信息,并操作类的属性和方法。是框架设计的核心基础。

获取 Class 对象的三种方式

java
// 方式一:Class.forName()
Class<?> clazz1 = Class.forName("com.example.User");

// 方式二:.class 语法
Class<User> clazz2 = User.class;

// 方式三:getClass()
User user = new User();
Class<?> clazz3 = user.getClass();

操作构造方法

java
Class<User> clazz = User.class;

// 获取无参构造
User user = clazz.getDeclaredConstructor().newInstance();

// 获取有参构造
Constructor<User> constructor = clazz.getDeclaredConstructor(String.class, int.class);
User user2 = constructor.newInstance("张三", 25);

操作属性和方法

java
User user = new User();
Class<?> clazz = user.getClass();

// 获取私有属性并赋值
Field nameField = clazz.getDeclaredField("name");
nameField.setAccessible(true); // 绕过访问检查
nameField.set(user, "李四");

// 调用方法
Method method = clazz.getDeclaredMethod("setAge", int.class);
method.invoke(user, 30);

实际应用:简单工厂模式

java
public class BeanFactory {
    private Map<String, Object> beans = new HashMap<>();

    public void register(String name, String className) throws Exception {
        Class<?> clazz = Class.forName(className);
        beans.put(name, clazz.getDeclaredConstructor().newInstance());
    }

    @SuppressWarnings("unchecked")
    public <T> T getBean(String name) {
        return (T) beans.get(name);
    }
}

TIP

反射虽然灵活,但有性能开销。Spring、MyBatis 等框架大量使用反射来实现 IoC、AOP、ORM 等功能。