springMvc和springAop實現原理對比

1.兩者的實現思路是一樣的,都會使用到jdk動態代理,當然aop可能也會用到cgilb代理實現;

jdk的生成的代理對象是實現了實際類接口,繼承了Proxy代理類($Proxy0 extends Proxy implements Human),裏邊的攔截處理器是通過實現InvocationHandler接口創建自己的調用處理器;

cgilb生成的代理對象是繼承了實際類,實現了cgilb類庫裏邊的Factory接口;裏邊的攔截處理器是通過實現MethodInterceptor接口創建自己的調用處理器;(注:使用cglib可以實現動態代理,即使被代理的類沒有實現接口,但被代理的類必須不是final類

2.兩個都會有攔截器,比如springMvc裏邊是叫攔截器或者過濾器,aop裏邊是切面,都會返回一個鏈路信息

mvc返回的是:HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器);

aop返回的是chain集合:Get the interception chain for this method. 獲取代理需要在目標方法執行前後,切入的攔截器鏈;(看源碼)

3.前置攔截,後置攔截都處理完之後,最後都會調用代理類對應方法的invoke方法,完成調用;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章