1. 程式人生 > >25(java中的反射和動態代理)

25(java中的反射和動態代理)

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類