在學習Spring的時候,我們知道Spring主要有兩大思想,一個是IoC,另一個就是AOP,對於IoC,依賴注入就不用多說了,而對於Spring的核心AOP來說,我們不但要知道怎么通過AOP來滿足的我們的功能,我們更需要學習的是其底層是怎么樣的一個原理,而AOP的原理就是java的動態代理機制,所以本篇隨筆就是對java的動態機制進行一個回顧。
在java的動態代理機制中,有兩個重要的類或接口,一個是 InvocationHandler(Interface)、另一個則是 Proxy(Class),這一個類和接口是實現我們動態代理所必須用到的。首先我們先來看看java的API幫助文檔是怎么樣對這兩個類進行描述的:
普通案例,直接上代碼
package proxydemo; public class actor { /* * 方法一,普通演員 */ public void basicActor(float money) { System.out.println("給錢干活:"+money); } /* * 方法二:高危演出 */ public void dangerActor(float money) { System.out.println("給錢干活:"+money); } }
package proxydemo; public class client { public static void main(String[] args) { actor a=new actor(); a.basicActor(100f); a.dangerActor(300f); } }
以上是普通實現方式,如何基於動態代理實現呢?
package proxydemo; public interface IActor { /* * 方法一,普通演員 */ public void basicActor(float money); /* * 方法二:高危演出 */ public void dangerActor(float money); }
來個接口,寫proxy
package proxydemo; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class client { public static void main(String[] args) { actor a=new actor(); // a.basicActor(100f); // a.dangerActor(300f); Proxy.newProxyInstance(a.getClass().getClassLoader(), a.getClass().getInterfaces(),new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO 自動生成的方法存根 return null; } } ); } }
未完待續,