JavaWEB開發18——基礎加強

扎瓦發表於2019-01-19

一、類載入器
1.什麼是類載入器,作用是什麼?
類載入器就載入位元組碼檔案(.class)

2.類載入器的種類
類載入器有三種,不同類載入器載入不同的

1)BootStrap:引導類載入器:載入都是最基礎的檔案
2)ExtClassLoader:擴充套件類載入器:載入都是基礎的檔案
3)AppClassLoader:應用類載入器:三方jar包和自己編寫java檔案

怎麼獲得類載入器?(重點)
ClassLoader 位元組碼物件.getClassLoader();

二、註解 @xxx
1.什麼是註解,註解作用
註解就是符合一定格式的語法 @xxxx
註解作用:
註釋:在閱讀程式時清楚—-給程式設計師看的
註解:給jvm看的,給機器看的

註解在目前而言最主流的應用:代替配置檔案
關於配置檔案與註解開發的優缺點:
註解優點:開發效率高 成本低
註解缺點:耦合性大 並且不利於後期維護

2.jdk5提供的註解
@Override:告知編譯器此方法是覆蓋父類的
@Deprecated:標註過時
@SuppressWarnings:壓制警告

發現的問題:
不同的註解只能在不同的位置使用(方法上、欄位上、類上)

3.自定義註解(瞭解)
1)怎樣去編寫一個自定義的註解
2)怎樣去使用註解
3)怎樣去解析註解—–使用反射知識

(1)編寫一個註解
關鍵字:@interface
註解的屬性:
語法:返回值 名稱();
注意:如果屬性的名字是value,並且註解的屬性值有一個 那麼在使用註解時可以省略value

註解屬性型別只能是以下幾種
1.基本型別

        2.String
        3.列舉型別
        4.註解型別
        5.Class型別
        6.以上型別的一維陣列型別

(2)使用註解
在類/方法/欄位 上面是@XXX

(3)解析使用了註解的類
介入一個概念:元註解:代表修飾註解的註解,作用:限制定義的註解的特性
@Retention
SOURCE: 註解在原始碼級別可見
CLASS:註解在位元組碼檔案級別可見
RUNTIME:註解在整個執行階段都可見
@Target
代表註解修飾的範圍:類上使用,方法上使用,欄位上使用
FIELD:欄位上可用此註解
METHOD:方法上可以用此註解
TYPE:類/介面上可以使用此註解

注意:要想解析使用了註解的類 , 那麼該註解的Retention必須設定成Runtime

關於註解解析的實質:從註解中解析出屬性值

位元組碼物件存在於獲得註解相關的方法
isAnnotationPresent(Class<? extends Annotation> annotationClass) : 判斷該位元組碼物件身上是否使用該註解了
getAnnotation(Class annotationClass) :獲得該位元組碼物件身上的註解物件

三、動態代理
1.什麼是代理(中介)
目標物件/被代理物件 —— 房主:真正的租房的方法
代理物件 ——- 黑中介:有租房子的方法(呼叫房主的租房的方法)
執行代理物件方法的物件 —- 租房的人

流程:我們要租房—–>中介(租房的方法)——>房主(租房的方法)
抽象:呼叫物件—–>代理物件——>目標物件
2.動態代理
動態代理:不用手動編寫一個代理物件,不需要一一編寫與目標物件相同的方法,這個過程,在執行時 的記憶體中動態生成代理物件。——位元組碼物件級別的代理物件

動態代理的API:
在jdk的API中存在一個Proxy中存在一個生成動態代理的的方法newProxyInstance
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

返回值:Object就是代理物件
引數:loader:代表與目標物件相同的類載入器——-目標對 象.getClass().getClassLoader()
interfaces:代表與目標物件實現的所有的介面位元組碼物件陣列
h:具體的代理的操作,InvocationHandler介面

注意:JDK的Proxy方式實現的動態代理 目標物件必須有介面 沒有介面不能實現jdk版動態代理

相關文章