日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
掌握ReflectionUtils:解鎖Java反射的無限可能

前言

反射是一種能夠在運(yùn)行時(shí)檢查或操作程序結(jié)構(gòu)、元數(shù)據(jù)和行為的特性。這使得程序能夠動態(tài)地獲取關(guān)于類、方法、字段等元素的信息,以及在運(yùn)行時(shí)進(jìn)行相應(yīng)的操作。

創(chuàng)新互聯(lián)自2013年起,先為南樂等服務(wù)建站,南樂等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為南樂企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

獲取class對象的三種實(shí)現(xiàn)

  • Class clazz = demo.getClass();
  • Class clazz = Demo.class;
  • Class clazz = Class.forName("com.demo.Demo");

而在Spring框架中,ReflectionUtils是org.springframework.util包下的一個(gè)實(shí)用工具類,旨在簡化與反射相關(guān)的常見任務(wù)。它提供了一組方法,使得開發(fā)人員能夠更方便地執(zhí)行反射操作,而不必處理過多的樣板代碼。

演示

獲取屬性字段

/**
 * 獲取屬性字段
 * 可以指定屬性的類型:findField(Class clazz, @Nullable String name, @Nullable Class type)
**/
public static void findField(){
    //查找屬性字段name
    Field name = ReflectionUtils.findField(Demo.class, "name");
    System.out.println(name);
}

獲取對象的 field 屬性值

/**
* 獲取對象的 field 屬性值
**/
public static void getField() {
    Demo demo = new Demo();
    demo.setName("一安未來");
    demo.setAge(20);
    //獲取Demo中的name屬性字段
    Field field = ReflectionUtils.findField(Demo.class, "name");
    //取消name屬性的private權(quán)限控制
    ReflectionUtils.makeAccessible(field);
    //獲取對象的姓名字段的值
    Object value = ReflectionUtils.getField(field, demo);
    System.out.println(value);
}

設(shè)置對象的 field 屬性值

/**
 * 設(shè)置對象的 field 屬性值
 **/
public static void setField() {
    Demo demo = new Demo();
    demo.setName("一安未來");
    demo.setAge(20);
    //獲取Demo中的name屬性字段
    Field field = ReflectionUtils.findField(Demo.class, "name");
    //取消name屬性的private權(quán)限控制
    ReflectionUtils.makeAccessible(field);
    //設(shè)置對象的姓名字段的值
    ReflectionUtils.setField(field, demo, "一安未來_v2");
    System.out.println(demo.getName());
}

對象的值復(fù)制

/**
* 對象的值復(fù)制
**/
public static void shallowCopyFieldState() {
    Demo demo = new Demo();
    demo.setName("一安未來");
    demo.setAge(20);
    Demo demo1 = new Demo();
    //把對象demo的值復(fù)制到對象demo1上
    ReflectionUtils.shallowCopyFieldState(demo, demo1);
    System.out.println(demo1);
}

對給定類的所有方法執(zhí)行一個(gè)操作

/**
* 對給定類的所有方法執(zhí)行一個(gè)操作
**/
public static void doWithMethods(){
    ReflectionUtils.doWithMethods(Demo.class, method -> {
        // 處理每個(gè)方法
        System.out.println("找到方法:" + method.getName());
    });
}

對給定類的所有字段執(zhí)行一個(gè)操作

/**
* 對給定類的所有字段執(zhí)行一個(gè)操作
**/
public static void doWithFields(){
    ReflectionUtils.doWithFields(Demo.class, field -> {
        // 處理每個(gè)字段
        System.out.println("找到字段:" + field.getName());
    });
}

添加過濾器來選擇性的處理方法或字段

/**
* 添加過濾器來選擇性地處理方法或字段
**/
public static void doWithMethodsFilter(){
    ReflectionUtils.doWithMethods(
            Demo.class,
            method -> {
                // 處理符合條件的方法
                System.out.println("找到方法:" + method.getName());
            },
            method -> {
                // 過濾器:選擇性處理方法的條件
                return method.getName().startsWith("get");
            }
    );
}

調(diào)用指定方法

/**
 * 調(diào)用指定方法
 **/
public static void invokeMethod() throws NoSuchMethodException {
    Demo demo = new Demo();
    // 獲取方法對象
    Method method =demo.getClass().getDeclaredMethod("say", String.class);
    // 要傳遞的參數(shù)
    String [] methodArgs = { "一安未來" };
    ReflectionUtils.makeAccessible(method);
    ReflectionUtils.invokeMethod(method, demo, methodArgs);

}

測試

public static void main(String[] args) throws NoSuchMethodException {
    findField();
    System.out.println("===============================");
    getField();
    System.out.println("===============================");
    setField();
    System.out.println("===============================");
    shallowCopyFieldState();
    System.out.println("===============================");
    doWithMethods();
    System.out.println("===============================");
    doWithFields();
    System.out.println("===============================");
    doWithMethodsFilter();
    System.out.println("===============================");
    invokeMethod();
}

輸出:

private java.lang.String org.yian.reflectionUtils.Demo.name
===============================
一安未來
===============================
一安未來_v2
===============================
Demo(name=一安未來, age=20)
===============================
找到方法:equals
找到方法:toString
找到方法:hashCode
找到方法:getName
找到方法:setName
找到方法:say
找到方法:getAge
找到方法:setAge
找到方法:canEqual
找到方法:finalize
找到方法:wait
找到方法:wait
找到方法:wait
找到方法:equals
找到方法:toString
找到方法:hashCode
找到方法:getClass
找到方法:clone
找到方法:notify
找到方法:notifyAll
找到方法:registerNatives
===============================
找到字段:name
找到字段:age
===============================
找到方法:getName
找到方法:getAge
找到方法:getClass
===============================
I'm 一安未來


網(wǎng)頁標(biāo)題:掌握ReflectionUtils:解鎖Java反射的無限可能
地址分享:http://www.5511xx.com/article/codpjhc.html