真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

spring之反射機制之Spring-DI核心實現(xiàn)-創(chuàng)新互聯(lián)

文章目錄
  • 前言
  • 一、回顧反射機制之反射調(diào)用方法
    • 1、編寫一個方法類SomeService
    • 2、通過反射機制調(diào)用SomeService類中的方法
  • 二、反射機制之Spring-DI核心實現(xiàn)

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、做網(wǎng)站與策劃設計,平遙網(wǎng)站建設哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十余年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:平遙等地區(qū)。平遙做網(wǎng)站價格咨詢:13518219792
前言

調(diào)用一個方法當中含有幾個要素?
1、調(diào)用哪個對象
2、調(diào)用哪個方法
3、調(diào)用方法的時候傳什么參數(shù)
4、方法執(zhí)行結束之后的返回結果
調(diào)用哪個對象的哪個方法,傳什么參數(shù),返回什么值
即使是使用反射機制調(diào)用方法,也同樣需要具備這四個要素


一、回顧反射機制之反射調(diào)用方法

使用反射機制怎么調(diào)用方法

1、編寫一個方法類SomeService
public class SomeService {public void doSome(){System.out.println("public void doSome()執(zhí)行。");
    }
    public String doSome(String s){System.out.println("public String doSome(String s)執(zhí)行。");
        return s;
    }
    public String doSome(String s,int i){System.out.println("public String doSome(String s,int i)執(zhí)行");
        return s+i;
    }
}
2、通過反射機制調(diào)用SomeService類中的方法

1、獲取類:

Classclazz = Class.forName("com.bjpowernode.spring.reflect.SomeService");

2、獲取方法:

getDeclaredMethod:
第一個參數(shù):方法名
第二個參數(shù):方法中的參數(shù)
在一個類當中,方法名是可以一樣的。Java語法中允許方法重載,因此只通過方法名是獲取不到方法的,需要借助第二個參數(shù)。告訴Java程序到底是哪個doSome方法。通過參數(shù)來區(qū)分方法。

Method doSomeMethod = clazz.getDeclaredMethod("doSome", String.class, int.class);

3、調(diào)用方法:
四要素:調(diào)用哪個對象的哪個方法,傳什么參數(shù),返回什么值
獲取對象的兩種方法:

Object obj = clazz.newInstance();

如果覺得該方法已經(jīng)過時,還可以通過獲取類的無參數(shù)構造方法創(chuàng)建對象:

//獲取無參數(shù)構造方法創(chuàng)建對象
        Constructorcon = clazz.getDeclaredConstructor();
        Object obj2 = con.newInstance();
四要素:
    //obj:哪個對象
    //doSomeMethod:哪個方法
    //"小白", 23:傳什么參數(shù)
    //retValue:返回什么值
Object retValue = doSomeMethod.invoke(obj, "小白", 23);

執(zhí)行結果:
在這里插入圖片描述
完整代碼:

public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {//獲取類
        Classclazz = Class.forName("com.bjpowernode.spring.reflect.SomeService");
        //獲取方法 (參數(shù):方法名,可變長)
        Method doSomeMethod = clazz.getDeclaredMethod("doSome", String.class, int.class);
        //調(diào)用方法
        //四要素:調(diào)用哪個對象的哪個方法,傳什么參數(shù),返回什么值
        Object obj = clazz.newInstance();
        //獲取無參數(shù)構造方法創(chuàng)建對象
        //Constructorcon = clazz.getDeclaredConstructor();
        //Object obj2 = con.newInstance();
        Object retValue = doSomeMethod.invoke(obj, "小白", 23);
        System.out.println(retValue);
    }
}
二、反射機制之Spring-DI核心實現(xiàn)

需求:
假設現(xiàn)在已知以下信息:

1、有這樣一個類,類名叫做:com.bjpowernode.spring.reflect.User
2、這個類符合javabean規(guī)范。屬性私有化,對外提供公開的setter和getter方法
3、知道這個類當中有一個屬性,age
4、并且還知道age屬性的類型是int類型

通過反射機制調(diào)用相關方法,給User對象的age屬性賦值
關鍵在于
1、通過已知的屬性名拼接出方法名:

String setMethodName = "set"+propertyName.toUpperCase().charAt(0)+propertyName.substring(1);

2、根據(jù)屬性名獲取屬性類型:

//根據(jù)屬性名獲取屬性類型
        Field field = clazz.getDeclaredField("age");

然后直接 field.getType() 就是屬性類型=int.Class

完整代碼:

public class Test4 {public static void main(String[] args) throws Exception {//已知類名:
        String className = "com.bjpowernode.spring.reflect.User";
        //已知屬性名:
        String propertyName = "age";

        //通過反射機制調(diào)用setAge(int)方法
        Classclazz = Class.forName(className);
        //拼接set方法名
        String setMethodName = "set"+propertyName.toUpperCase().charAt(0)+propertyName.substring(1);
        //根據(jù)屬性名獲取屬性類型
        Field field = clazz.getDeclaredField("age");
        Method setAgeMethod = clazz.getDeclaredMethod(setMethodName, field.getType());
        Object o = clazz.newInstance();
        //給屬性賦值
        setAgeMethod.invoke(o, 23);
        System.out.println(o);
    }
}

執(zhí)行結果:
在這里插入圖片描述


你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


新聞名稱:spring之反射機制之Spring-DI核心實現(xiàn)-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jpegg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部