反射,代理,繼承(重寫),AOP,回撥函式關係理解
回撥函式(callback):自己只需要呼叫別人的方法直接完成即可,自己不做,將自己的引用傳給別人,讓別人去做,別人通過引用再呼叫自己的的方法來做完,而呼叫的這個自己方法就是回撥函式。
別人並不關心你的函式的具體實現,只知道在什麼時候呼叫你的函式;而你知道你的函式的具體實現,卻不知道在什麼時候呼叫你的函式。
反射(reflection):比較底層的一種解決問題的方式,通過得到class位元組碼檔案來獲取到一個類中的屬性和方法等所有東西,然後進行使用該類
代理(proxy):對於一個普通的類想要擴充套件其功能,就需要一個代理類,代理類中需要傳入一個普通類的物件,至於這個代理類中的代理方法肯定需要普通類中的那個普通方法為前提來擴充套件,此時獲取普通類中的那個方法就可以用多種方式,可以直接通過傳入的物件用點號的方式直接呼叫(靜態代理),也可以通過反射的方式獲取其中的方法(動態jdk代理),還可以通過攔截回撥的方式(動態cglib代理)
代理分為靜態代理和動態代理,動態代理又分為jdk代理和cglib代理
靜態就是隻適用這一個類寫死了,而動態可以根據你傳入的物件來判定你是哪個類。
代理類定義的時候關注2點:
- 代理類的初始化方法的建立(方式也很多:可以重寫構造方法(靜態代理),也可以寫一個返回一個對應的代理類物件的初始化方法(動態代理))
- 增強的代理方法的建立增強的代理方法的建立
代理類使用的時候無非就是:
- 先建立一個普通類的物件,
- 然後將普通類中的物件當成引數來創建出代理類的物件(如果是動態代理,需要先建立一個通用的代理類物件,然後通過通用的代理類物件呼叫代理類中的初始化方法並傳進相應的普通類物件來創建出對應普通類的代理類物件),
- 然後通過這個跟普通類對應的代理類物件呼叫其中的增強方法。
代理的詳細解釋:https://www.cnblogs.com/ygj0930/p/6542259.html
繼承(extends)(重寫override):繼承後然後重寫父類的方法,可以實現對功能的擴充套件以及直接的改變,這個大家用的較多。
AOP思想(Aspect Oriented Program):面向切面(方面)程式設計,目的是不修改不汙染原來的程式碼,添加了擴充套件功能。關注切點和切面,在spring中可以通過配置的方式或註解的方式來實現。在struts2中的攔截器也是利用了aop思想+責任鏈模式來實現的。那麼aop思想的底層實現方式就可以用到上面的技術點來實現!
未完待續。。。。。。。。。。。。。。。。。。。