java動態代理實現與原理詳細分析
阿新 • • 發佈:2020-11-14
代理模式是一種設計模式,提供了對目標物件額外的訪問方式,即通過代理物件訪問目標物件,這樣可以在不修改原目標物件的前提下,提供額外的功能操作,擴充套件目標物件的功能。
示例:火車票代售就是代理模式的體現,我們可以從火車票代售點買火車票,代售點代理了火車站物件,提供了買火車票的方法
一:靜態代理
- 前提:需要代理物件和目標物件實現一樣的介面
- 優點:可以在不修改目標物件的前提下,擴充套件目標物件的功能
- 缺點:如果目標物件的方法發生改變,比如方法名做了修改,則代理類也要做修改
/** * 介面 * @author Ethon * */ public interface Person {void add(); }
/** * 目標物件 * @author Ethon * */ public class Student implements Person { @Override public void add() { System.out.println("這是目標物件中的add()方法"); } }
/** * 代理物件 * @author Ethon * */ public class StudentProxy implements Person{ //目標物件 privateStudent student; public StudentProxy(Student student){ this.student = student; } @Override public void add() { System.out.println("開啟事務..."); // 擴充套件功能 student.add(); System.out.println("提交事務..."); } }
/** * 測試類 * @author Ethon * */ publicclass Test { public static void main(String[] args){ //目標物件 Student student = new Student(); //代理物件 StudentProxy proxy = new StudentProxy(student); proxy.add(); } }
輸出結果:
開啟事務...
這是目標物件中的add()方法
提交事務...