基於接口的動態代理


在學習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;
			}
		} );
	}
}

  未完待續,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM