要想了解Java動(dòng)態(tài)代理,首先要了解什么叫做代理,熟悉設(shè)計(jì)模式的朋友一定知道在Gof總結(jié)的23種設(shè)計(jì)模式中,有一種叫做代理(Proxy)的對(duì)象結(jié)構(gòu)型模式,動(dòng)態(tài)代理中的代理,指的就是這種設(shè)計(jì)模式。

在我看來所謂的代理模式,和23種設(shè)計(jì)模式中的“裝飾模式”是一個(gè)東西。23種設(shè)計(jì)模式中將它們作為兩種模式,網(wǎng)上也有些文章講這兩種模式的異同,從細(xì)節(jié)來看,確實(shí)可以人為地區(qū)分這兩種模式,但是抽象到一定高度后,我認(rèn)為這兩種模式是完全一樣的。因此學(xué)會(huì)了代理模式,也就同時(shí)掌握了裝飾模式。

代理模式

代理模式簡單來說,就是對(duì)一個(gè)對(duì)象進(jìn)行包裝,包裝后生成的對(duì)象具有和原對(duì)象一樣的方法列表,但是每個(gè)方法都可以是被包裝過的。

靜態(tài)代理

讓我們先來看一段代碼:

萬碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

package common;public class Test {    static interface Subject{        void sayHi();        void sayHello();
    }    
    static class SubjectImpl implements Subject{

        @Override        public void sayHi() {
            System.out.println("hi");