25(java中的反射和動態代理)
阿新 • • 發佈:2018-12-06
1 概述
反射獲取的都是class物件,以下是在不同的階段獲取物件的方式。
2 原始檔階段class物件的作用
可以利用全類名創造物件,具體程式碼為:
3 class物件獲取類中的欄位(即成員變數)
註釋:通過Class.forName()獲取到了Person的位元組碼物件
getConstructor()方法返回構造方法,注意引數需要使用Class物件
通過得到的有參構造建立一個例項p
獲取私有變數private name,暴力獲取
將name這個欄位設定為可以訪問
將p物件中的name欄位改為“李四”值。
4 class物件獲取類中的方法
5 動態代理
上面反射的作用就是在於獲得位元組碼檔案,通過位元組碼檔案獲得這個位元組碼檔案的屬性啊,方法啊之類的,動態代理這個概念看似在目前學習階段沒有作用,但是在以後從事java EE開發中,那些框架什麼的,還是有用處的,動態代理其實是一種加強,比如我有一個筆,這個筆買來就是黑色墨水,但是我現在想讓它寫紅色墨水,又不能把筆拆了,所以我只能通過
這是我對動態代理的理解。下面用程式碼詳細解釋:
(0)動態代理只能用於介面,所以我會對這個介面進行代理
(1)黑色的鋼筆介面
(2)黑色鋼筆介面的實現類
(3)未代理之前
(4)代理第一步:建立實現InvocationHandler的類,並重寫invok方法
(5)代理第二步:使用Proxy的newProxyInstance開始代理
(6)代理後結果
(7)總結
三句話:1 ,只能對介面代理
2,InvokationHandler介面
3,Proxy類