小馬哥Spring事件驅動模型

516農夫發表於2020-12-13

CO:Spring容器的核心,AOP、宣告式事務等功能都基於此產生。
ICO不夠開門見山,所以後期由Martin Fowler用DI,依賴注入的概念代替了IoC,讓呼叫類對某一介面實現類的依賴由第三方(容器或者協作類)注入,從而移除呼叫類對某一介面實現類的依賴。注入方式可以劃分為三種型別:建構函式注入、屬性注入和介面注入。介面注入方式需要額外宣告一個介面,增加了類的數目,並且其效果同屬性注入並無區別,所以不提倡採用介面注入的方法。Spring是這樣的一個容器,通過配置檔案或註解描述類和類之間的依賴關係,自動完成類的初始化和依賴注入工作。Java允許使用者借用Class相關的元資訊物件間接呼叫Class的屬性,構造器和方法,就是所謂的反射。invoke(Object object, Object param)第一個引數是操作目標類例項,第二個物件是目標方法的入參。Class沒有public 的構造方法。Class物件是在裝載類時由JVM通過呼叫類裝載器中的defineClass()方法自動創造的。Java反射在java.reflect包中定義了三個最主要的反射類:Constructor:類的構造器反射類,通過Class#getConstructor()方法可以獲得類的所有建構函式反射物件陣列。通過該類的newInstance(Object[] initargs)可以建立一個物件的例項,相當於new,JDK 5.0之後演化成了newInstance(Object…initargs),使用起來更加方便。Method:類方法的反射類,通過Class#getDeclaredMethods()方法可以獲得類的所有方法反射類的陣列Method[]。該類的invoker(Object obj, Object[] args)可以呼叫這個方法,obj是目標物件,args是入參。Field:類的成員變數的反射類,通過Class#getDeclaredFields()方法可以獲取類的成員變數的反射物件陣列。Java的反射體系保證了可以通過程式化的方式訪問目標類中的所有元素。private和protected的成員變數和方法在JVM安全機制允許的情況下也可以通過反射進行呼叫。JDK所提供的訪問資源的類並不能很好地滿足各種底層資源的訪問需求。

相關文章