摘要:實現數據庫操作關于人員的數據庫操作定義一個代理類代理,如果使用靜態代理,那么這個類必須實現接口,這里采用動態代理類,免去實現代理類定義的所有接口。
描述:代理對象和被代理對象具有相同的行為,客戶端通過代理對象實現對被代理對象調用,代理對象除了可以代理被代理對象的所有行為外,還可以在被代理對象的所有行為上添加一些額外的內容,如開閉事務,權限攔截等;動態代理可以生成一個不用實現被代理類的所有接口的代理類,它內部通過被代理類的classLoader和反射機制實現被代理類的所有接口。。
場景:在數據庫操作中,假如所有增刪改查操作都需要加log記錄,可以代理這個數據庫操作,然后在運行這些增刪改查操作時加一個log記錄,客戶端使用方式仍然不變。
實現:
數據庫操作:
interface Dao { void insert(); void delete(); }
關于人員的數據庫操作:
class UserDao implements Dao { @Override public void insert() { System.out.println("insert user instance to db!"); } @Override public void delete() { System.out.println("delete user instance from db!"); } }
定義一個代理類代理UserDao,如果使用靜態代理,那么這個類必須實現Dao接口,這里采用動態代理類,免去實現代理類定義的所有接口。
class UserDaoProxy implements InvocationHandler { Dao dao; UserDaoProxy(Dao dao) { this.dao = dao; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { before(); Object result = method.invoke(dao, args); after(); return result; } private void before() { System.out.println("開始log..."); } private void after() { System.out.println("結束log"); } }
客戶端調用:
public class ProxyDemo { public static void main(String[] args) { UserDaoProxy proxy = new UserDaoProxy(new UserDao()); Dao dao = (Dao)Proxy.newProxyInstance(UserDao.class.getClassLoader(), UserDao.class.getInterfaces(), proxy); dao.insert(); dao.delete(); } }
打印結果:
開始log...
insert user instance to db!
結束log
開始log...
delete user instance from db!
結束log
結論:通過代理類即能保持原接口調用不變,還能對接口調用的前后增加額外的業務代碼,甚至可以改變接口的實現,why?想想現實中的代理就知道了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64007.html
摘要:動態代理又被稱為代理或接口代理。靜態代理在編譯時產生字節碼文件,可以直接使用,效率高。代理無需實現接口,通過生成類字節碼實現代理,比反射稍快,不存在性能問題,但會繼承目標對象,需要重寫方法,所以目標對象不能為類。 一、代理模式介紹 代理模式是一種設計模式,提供了對目標對象額外的訪問方式,即通過代理對象訪問目標對象,這樣可以在不修改原目標對象的前提下,提供額外的功能操作,擴展目標對象的功...
摘要:代理模式概念代理模式分為兩種,一種是靜態代理模式,一種是動態代理模式。面向切面的編程也是使用動態代理模式來實現的。 1.代理模式概念 代理模式分為兩種,一種是靜態代理模式,一種是動態代理模式。 靜態代理模式:在程序運行之前需要寫好代理類 動態代理模式:在程序運行期間動態生成代理類 2.動態代理的實現 動態代理實現的步驟: (1)寫一個代理類SubjectHandler實現Invoca...
摘要:代理模式基本概念不論是靜態代理還是動態代理其本質都是代理模式的一種實現那么什么是代理模式呢代理模式即給某一個對象提供一個代理并由代理對象控制對原對象的引用代理模式其實取材于實際生活例如我們生活中常見的房屋租賃代理我們在租房時一般不是直接和房 代理模式 基本概念 不論是靜態代理還是動態代理, 其本質都是代理模式的一種實現, 那么什么是代理模式呢?代理模式, 即給某一個對象提供一個代理, ...
摘要:簡介代理模式委托模式就是使用代理對象來訪問目標對象這樣可以在目標對象執行前后來做一些邏輯處理這里使用到編程中的一個思想不要隨意去修改別人已經寫好的代碼或者方法如果需改修改可以通過代理的方式來擴展該方法代理模式通用類圖設計模式之禪文中提到為其 簡介 代理模式(委托模式)就是使用代理對象來訪問目標對象, 這樣可以在目標對象執行前后, 來做一些邏輯處理. 這里使用到編程中的一個思想:不要隨意...
時間:2017年08月28日星期一說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github.com/zccodere/s... 第一章:代理模式 1-1 概念介紹 學習本課程基礎 面向對象的設計思維 了解多態的概念 了解反射機制 課程目標 代理模式基本概念及分類...
摘要:本文首發于作者最近在學,研究了下和代理模式,寫點心得和大家分享下。所以下面來重點分析下代理模式。這里代理模式分為靜態代理和動態代理兩種,我們分別來看下。代理模式,代理,意味著有一方代替另一方完成一件事。 本文首發于 https://jaychen.cc作者 jaychen 最近在學 Spring,研究了下 AOP 和代理模式,寫點心得和大家分享下。 AOP 先說下AOP,AOP 全稱 ...
閱讀 704·2021-11-22 13:54
閱讀 3065·2021-09-26 10:16
閱讀 3490·2021-09-08 09:35
閱讀 1576·2019-08-30 15:55
閱讀 3429·2019-08-30 15:54
閱讀 2076·2019-08-30 10:57
閱讀 497·2019-08-29 16:25
閱讀 877·2019-08-29 16:15