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 等功能。