AOP 面向切面編程,旨在各個方法中抽離出每個方法都要執(zhí)行的耦合方法,達(dá)到代碼復(fù)用的目的
JAVA中的AOP的實現(xiàn)是通過動態(tài)代理實現(xiàn)的,其中包含JDK動態(tài)代理和cglib動態(tài)代理兩種形式生成代理對象,
在Spring中對兩種動態(tài)代理進(jìn)行了封裝整合,新增了ProxyBeanFactory,只需要實現(xiàn)該工廠對象的相關(guān)方法,設(shè)置需要進(jìn)行AOP的類和新增需要在方法運(yùn)行前或者運(yùn)行后執(zhí)行的切面代理邏輯,就可以實現(xiàn)一個AOP,這樣一個對象如果類以接口的形式存在,那么會使用JDK動態(tài)代理,默認(rèn)使用cglib動態(tài)代理
Spirng中封裝了三種方法幫助我們對代碼進(jìn)行AOP,只需實現(xiàn)其中一種方法的方法即可,一般我們采用注解的方式,執(zhí)行邏輯無非就是設(shè)置需要進(jìn)行切面的類和需要執(zhí)行的代理邏輯,如下圖所示方法
一
二
三
通過我們的設(shè)置,相關(guān)方法都會去實現(xiàn)我們的BeanPostProcessor后置處理器來執(zhí)行切面,bean ->實例化->填充屬性->初始化之后的擴(kuò)展節(jié)點(diǎn)進(jìn)行解析,掃描我們進(jìn)行了AOP相關(guān)操作的類和要執(zhí)行的相關(guān)代理邏輯,判斷是否需要進(jìn)行AOP,用哪個動態(tài)代理來實現(xiàn)AOP