Spring02——實現動態代理攔截器
實現動態代理的2種方式
第一種: 用JDK提供的 Proxy代理類 和 InvocationHandler呼叫處理類 配合起來可以攔截一個介面下面的實現類,攔截它的方法,這樣可以在它之前做點事情之後做點事情都可以。不過使用JDK這種方式必須實現接口才可以。優勢:使用反射建立物件,建立效率高。
面向介面程式設計 spring裡預設用jdk方式。為啥?都有介面,面向介面程式設計的。下面來實現一個小練習實踐理解
①自定義一個介面

②寫一個介面實現類

③寫一個攔截

④主函式呼叫

第二種: 用cglib第三方庫,它是用asm 這是搞class位元組碼的,這種方式基於子類的,基於繼承,如果類沒有介面就可以用這種方式。優勢:執行效率高
①建立一個練習類

②建立一個代理類

③主函式呼叫

執行效果:

上面例子舉得不是很好,一般在攔截到類和方法後可以乾點攔截前攔截後的事情,再舉個例子,比如io流操作攔截到後要close掉,可有時為了效率好則希望把它放入連線池裡,下次需要再呼叫,但是一close掉就銷燬了,所以可以在攔截到後再攔截前就把它放入連線池,這次就算close掉也已經放入連線池裡下次可以直接拿來用了。