代理模式能夠作不少事,像hibernate,spring都使用了代理模式。java
spring的aop就是用代理作的。spring
本系列分爲4章,靜態代理,動態代理熱身,動態代理,cglib代理ide
今天先寫一寫靜態代理測試
本例目的是在要調用的方法先後輸出start和end,會使用四個類this
接口HelloInterface
spa
接口實現類HelloInterfaceImplhibernate
靜態代理類HelloStaticProxy代理
測試類HelloTestcode
首先寫一個接口HelloInterface,定義一個say方法接口
package net.hldh.river.staticproxy; /** * Created by liuhj on 2015/12/1. */ public interface HelloInterface { public void say(); }
實現接口HelloInterfaceImpl,打印Hello
package net.hldh.river.staticproxy; /** * Created by liuhj on 2015/12/1. */ public class HelloInterfaceImpl implements HelloInterface { @Override public void say() { System.out.println("Hello"); } }
代理類HelloStaticProxy實現,在代理的方法內加先後環繞,是否是很像AOP
package net.hldh.river.staticproxy; /** * Created by liuhj on 2015/12/1. */ public class HelloStaticProxy{ //spring 依賴注入?相似吧 private HelloInterface helloInterface; public HelloStaticProxy(HelloInterface helloInterface){ this.helloInterface = helloInterface; } public void say_proxy(){ System.out.println("start"); helloInterface.say(); System.out.println("end"); } }
編寫測試類HelloTest
package net.hldh.river.staticproxy; /** * Created by liuhj on 2015/12/1. */ public class HelloTest { public static void main(String args[]){ HelloStaticProxy proxy = new HelloStaticProxy(new HelloInterfaceImpl()); proxy.say_proxy(); } }
輸出結果
start Hello end
靜態代理呢,使用的不是太多,主要是當你要修改接口或者其餘方法時要修改代理類實現類等好多方法,好麻煩
下一章主要寫寫動態代理前須要知道的知識
才疏學淺,若有錯誤敬請指出,謝謝。