• JAVA如何使用反射在运行时获取类的信息
  • 发布于 2个月前
  • 237 热度
    0 评论
创建一个对象是通过 new 关键字来实现的,比如:
Person person = new Person();
Person 类的信息在编译时就确定了,那假如在编译期无法确定类的信息,但又想在运行时获取类的信息、创建类的实例、调用类的方法,这时候就要用到反射。反射功能主要通过 java.lang.Class 类及 java.lang.reflect 包中的类如 Method, Field, Constructor 等来实现。

三分恶面渣逆袭:Java反射相关类
比如说我们可以装来动态加载类并创建对象:
String className = "java.util.Date";
Class<?> cls = Class.forName(className);
Object obj = cls.newInstance();
System.out.println(obj.getClass().getName());
反射有哪些应用场景?
①、Spring 框架就大量使用了反射来动态加载和管理 Bean
Class<?> clazz = Class.forName("com.example.MyClass");
Object instance = clazz.newInstance();

②、Java 的动态代理(Dynamic Proxy)机制就使用了反射来创建代理类

代理类可以在运行时动态处理方法调用,这在实现 AOP 和拦截器时非常有用。

// 堆代码 duidaima.com
InvocationHandler handler = new MyInvocationHandler();
MyInterface proxyInstance = (MyInterface) Proxy.newProxyInstance(
    MyInterface.class.getClassLoader(),
    new Class<?>[] { MyInterface.class },
    handler
);

③、JUnit 和 TestNG 等测试框架使用反射机制来发现和执行测试方法

反射允许框架扫描类,查找带有特定注解(如 @Test)的方法,并在运行时调用它们。

Method testMethod = testClass.getMethod("testSomething");
testMethod.invoke(testInstance);

用户评论