【Java】Spring的ReflectionUtils类常用方法学习笔记

目录

ReflectionUtils介绍

常用方法

访问字段

方法调用

处理回调

示例


脑容量不够了,以简单的小知识作为一天的结尾吧(悲

ReflectionUtils介绍

ReflectionUtils是Spring Framework中非常实用的一个工具类,为开发人员提供了简便的反射操作方法,使得处理反射相关任务变得更加高效和便捷。

常用方法

访问字段

1.ReflectionUtils.findField:

  • 介绍:该方法用于在类的继承层次结构中查找指定名称的字段,并返回该字段对象。
  • 示例:
public class MyClass {
    private String name;
    // getter and setter
}

Field field = ReflectionUtils.findField(MyClass.class, "name");
System.out.println("Field name: " + field.getName());

2.ReflectionUtils.setField:

  • 介绍:该方法用于设置指定对象的指定字段的值。
  • 示例:
public class MyClass {
    private String name;
    // getter and setter
}

MyClass obj = new MyClass();
Field field = ReflectionUtils.findField(MyClass.class, "name");
ReflectionUtils.setField(field, obj, "Alice");
System.out.println(obj.getName());

方法调用

3.ReflectionUtils.findMethod:

  • 介绍:该方法用于在类的继承层次结构中查找指定名称和参数类型的方法,并返回该方法对象。
  • 示例:
public class MyClass {
    public void greet(String name) {
        System.out.println("Hello, " + name + "!");
    }
}

Method method = ReflectionUtils.findMethod(MyClass.class, "greet", String.class);
System.out.println("Method name: " + method.getName());

4.ReflectionUtils.invokeMethod:

  • 介绍:该方法用于调用指定对象的方法。可以传递方法名和参数值进行调用。
  • 示例:
public class MyClass {
    public void greet(String name) {
        System.out.println("Hello, " + name + "!");
    }
}

MyClass obj = new MyClass();
ReflectionUtils.invokeMethod(ReflectionUtils.findMethod(MyClass.class, "greet", String.class), obj, "John");

处理回调

5.ReflectionUtils.doWithFields:

  • 介绍:该方法遍历类的所有字段并对其执行指定的操作。可以使用lambda表达式来定义具体的操作。
  • 示例:
public class MyClass {
    private String name;
    private int age;
    // getters and setters
}

ReflectionUtils.doWithFields(MyClass.class, field -> {
    System.out.println("Field name: " + field.getName());
});

6.ReflectionUtils.doWithMethods:

  • 介绍:该方法遍历类的所有方法并对其执行指定的操作。可以使用lambda表达式来定义具体的操作。
  • 示例:
public class MyClass {
    public void sayHello() {
        System.out.println("Hello!");
    }
    // other methods
}

ReflectionUtils.doWithMethods(MyClass.class, method -> {
    if (method.getName().startsWith("say")) {
        method.invoke(new MyClass());
    }
});

示例

MethodInvokeTypeProvider#readObject

private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException {
    inputStream.defaultReadObject();
    Method method = ReflectionUtils.findMethod(this.provider.getType().getClass(), this.methodName);
    this.result = ReflectionUtils.invokeMethod(method, this.provider.getType());
}

这段代码调用了 ReflectionUtils 先是 findMethod 返回 Method 对象然后紧接着调用 invokeMethod 反射调用。注意,这里的调用是无参调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值