這個類通常表示代理設置,通常爲類型和套接字。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()也會被調用