1. 程式人生 > 實用技巧 >java動態代理實現與原理詳細分析

java動態代理實現與原理詳細分析

代理模式是一種設計模式,提供了對目標物件額外的訪問方式,即通過代理物件訪問目標物件,這樣可以在不修改原目標物件的前提下,提供額外的功能操作,擴充套件目標物件的功能。

示例:火車票代售就是代理模式的體現,我們可以從火車票代售點買火車票,代售點代理了火車站物件,提供了買火車票的方法

一:靜態代理

  • 前提:需要代理物件和目標物件實現一樣的介面
  • 優點:可以在不修改目標物件的前提下,擴充套件目標物件的功能
  • 缺點:如果目標物件的方法發生改變,比如方法名做了修改,則代理類也要做修改
/**
 * 介面
 * @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{
    
    //目標物件
    private
Student student; public StudentProxy(Student student){ this.student = student; } @Override public void add() { System.out.println("開啟事務..."); // 擴充套件功能 student.add(); System.out.println("提交事務..."); } }
/**
 * 測試類
 * @author Ethon
 *
 */
public
class Test { public static void main(String[] args){ //目標物件 Student student = new Student(); //代理物件 StudentProxy proxy = new StudentProxy(student); proxy.add(); } }

輸出結果:

開啟事務...
這是目標物件中的add()方法
提交事務...