package com.ij34.proxy; public interface ProxyPattern { /* 代理和被代理的共同點就是要實現同一個接口 */ public void eat(); public void sleep(); }
package com.ij34.proxy; /* 代理類 */ public class GrilsMother implements ProxyPattern{ private ProxyPattern pp; public GrilsMother(ProxyPattern pp){ this.pp=pp; } @Override public void eat() { pp.eat(); } @Override public void sleep() { pp.sleep(); } }
package com.ij34.proxy; /* 被代理類 */ public class Gril implements ProxyPattern{ @Override public void eat() { System.out.println("我是girl,我在eat"); } @Override public void sleep() { System.out.println("我是girl,我在sleep"); } }
package com.ij34.proxy; /* 測試代理,表面上寫女孩女孩母親吃飯睡覺,實際上寫女孩吃飯睡覺 */ public class ProxyTest { public static void main(String[] args) { GrilsMother dm = new GrilsMother(new Gril()); dm.eat(); dm.sleep(); } }
附:ide
Spring裏代理模式,Spring AOP 利用了 AspectJ AOP實現的! AspectJ AOP 的底層用了動態代理
動態代理有兩種
目標方法有接口時候自動選用 JDK 動態代理
目標方法沒有接口時候選擇 CGLib 動態代理測試