類代理Proxy的使用實例

這個類通常表示代理設置,通常爲類型和套接字。Proxy是不可變的對象。

主要用於提供創建動態代理類和實例的靜態方法,它還是由這些方法創建的所有動態代理類的超類。

static object newProxyInstance(load,class,h)  返回一個指定接口的代理類實例,該接口可以將方法調用指派到指定的調用處理程序

接下來演示上述方法的講解實例

1、首先我們創建一個接口類 

這個接口中定義了兩個待實現的方法 geta() 是我們要觸發執行的方法

getb()是一個觸發方法

package ServletTest;

public interface test2 {
	public  void geta();
	public  void getb();
}

2、我們定義一個實現類 ,這裏注意 什麼地方使用接口 什麼地方使用類 以及我們要導入的包

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class test implements test2 {
	public  void geta() {
		int a=5;
		System.out.println(a);
	}
	public void getb() {
		System.out.println("觸發代碼");
	}
	public static test2 getTest() {
        //我們創建一個類
		test t = new test();
        // 爲類設置爲代理
		test2 proxy = (test2)Proxy.newProxyInstance(
				t.getClass().getClassLoader(), //類記載器
				//t.getClass().getInterfaces(),// 當目標是一個具體的類的時候使用這個
				new Class[] {test2.class},  //目標對象的實現接口
				//當調用t對象 方法的時候,自動觸發事務處理器
				new InvocationHandler() {
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						// TODO Auto-generated method stub
						Object ts= null;
						//當前執行的方法的方法名
						String meString = method.getName();
						System.out.println(meString);
						if("getb".equals(meString)){
						t.geta();
						//return ts;
						System.out.print("1");
						}else {
						ts = method.invoke(t, args);
						System.out.print("2");
						}
						return ts;
					}
				}
				);
		return proxy;
	}

3、我們通過代理調用我們的觸發方法

test2 t = getTest();
	t.getb();

現象:當我們的getb()被調用的時候,我們的geta()也會被調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章