JAVA中的反射機制可以獲取到類中的方法函式等資訊,問題是那是在程式運行的程序中可以獲取到,在撰寫利用該類的源代碼時,怎么知道這個類中有什么方法或函式
uj5u.com熱心網友回復:
我是沒看明白樓主你想問啥,"在撰寫利用該類的源代碼時" 這個指的是什么,你要用到反射,那程式肯定處于運行程序中了uj5u.com熱心網友回復:
靜態檔案就決議,不是反射。https://blog.csdn.net/crabstew/article/details/89547472
uj5u.com熱心網友回復:
那就反編譯class檔案jdk自帶的javap命令或用jad,jd-gui等工具
uj5u.com熱心網友回復:
非常感謝。我的意思是,比如我撰寫程式,我的程式中要通過反射用到其他公司撰寫的XXX.class檔案中的某個類中的方法或函式時,而此時我只知道他們這個XXX.CLASS實作了某個功能,但是具體的檔案中的類名稱,類中的方法名稱、函式名稱,我都不知道,我在撰寫我程式時,我怎么呼叫呢?
uj5u.com熱心網友回復:
如果是兩個公司之間的介面呼叫的話,大概率反射是沒有用的(我目前已知的方法應該是沒有,如果有的話,那所有的公司的資料都是不安全的了)
如果你想要呼叫其他人的介面,一般是讓對方在公網暴露一個地址給你,然后通過http請求去呼叫
uj5u.com熱心網友回復:
通過反射就可以獲取類的所有方法啊看看我寫的這個:https://blog.csdn.net/dotnetstudio/article/details/71315054
uj5u.com熱心網友回復:
就算你通過反射拿到了方法等資訊,你依然不知道這個方法是干啥的,怎么使用他。。。。。。沒用uj5u.com熱心網友回復:
兩種情況:1.拿到了對方公司的 class 檔案,反編譯就可以看到 方法名以及引數等資訊。此時可以反射呼叫
2.沒有 class 檔案,沒發用反射
uj5u.com熱心網友回復:
很簡單啊打開它啊,你都能用它了,首先它是存在的,既然存在就可以查看對吧。uj5u.com熱心網友回復:
開發工具一般都會有提示,比如eclipse、idea等,或者用反編譯工具先反編譯一下就知道了。uj5u.com熱心網友回復:
我是沒看明白樓主你想問啥,"在撰寫利用該類的源代碼時" 這個指的是什么,你要用到反射,那程式肯定處于運行程序中了
非常感謝。我的意思是,比如我撰寫程式,我的程式中要通過反射用到其他公司撰寫的XXX.class檔案中的某個類中的方法或函式時,而此時我只知道他們這個XXX.CLASS實作了某個功能,但是具體的檔案中的類名稱,類中的方法名稱、函式名稱,我都不知道,我在撰寫我程式時,我怎么呼叫呢?
如果是兩個公司之間的介面呼叫的話,大概率反射是沒有用的(我目前已知的方法應該是沒有,如果有的話,那所有的公司的資料都是不安全的了)
如果你想要呼叫其他人的介面,一般是讓對方在公網暴露一個地址給你,然后通過http請求去呼叫
是滴
通過反射可以知道未知的類有哪些方法,呼叫時要傳哪些型別的引數。但這些方法到底是啥意思,傳的引數要注意些什么,有什么要求,有什么準備作業要做…… 這些你都不知道的情況下,呼叫是很危險的的。實際上,對方公司提供的 class 或 jar,應該要向你提供API檔案,你按檔案的要求呼叫才合理。
反身并不是在為黑客行為提供便利!要想正常地使用好反射,要求各方面都要符合、遵循一定的約定,相互配合。
用得很廣泛的例子,比如 hibernate,在物體類上加上注解,然后 hibernate 框架就可以通過反射知道一個物體類和哪一表進行關聯,在查詢時可以動態生成 sql 陳述句,但 hibernate 框架不用任何改動;springboot mvc 里的 controller,通過注解動態地把一個 url 和一個方法關聯,springboot 框架會讀取這些注解,而不用修改 springboot 的框架實作……
uj5u.com熱心網友回復:
我是沒看明白樓主你想問啥,"在撰寫利用該類的源代碼時" 這個指的是什么,你要用到反射,那程式肯定處于運行程序中了
非常感謝。我的意思是,比如我撰寫程式,我的程式中要通過反射用到其他公司撰寫的XXX.class檔案中的某個類中的方法或函式時,而此時我只知道他們這個XXX.CLASS實作了某個功能,但是具體的檔案中的類名稱,類中的方法名稱、函式名稱,我都不知道,我在撰寫我程式時,我怎么呼叫呢?
既然你可以拿到class,那直接呼叫就可以了,為何要反射?你的需求就是很奇怪的,也許你想問的是別的東西,比如spring如何掃描類?這個才符合你描述的場景,畢竟寫spring的人是不知道我們具體應用中的class資訊的.
uj5u.com熱心網友回復:
可以將獲取到的方法和屬性列印出來查看,如果涉及到公司對接 基本上不會用到反射 因為反射甚至可以呼叫到對方不想暴露的成員或者方法對接基本上是將介面暴露給你進行操作 會有具體的對接檔案
uj5u.com熱心網友回復:
沒有原始碼,只有 class 檔案,然后,想知道對應類的屬性和方法以及方法的引數串列?這種情況,一般也就是采用反編譯技術了。
如果反編譯也行不通 嘗試使用一下 javap 命令,看不到函式體,但是,函式名和引數串列應該沒問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/12762.html
標籤:Web 開發
