在學習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;
}
} );
}
}
未完待續,
