java代理有jdk動態代理、cglib代理,這裡只說下jdk動態代理,jdk動態代理主要使用的是java反射機制(既java.lang.reflect包)
原理是(歌手、經紀人做例子):
建立一個公共的接口,例如:歌手public interface Singer;
用具體的類別實作接口,例如:周杰倫,他是歌手所以實作Singer這個類,class MySinger implements Singer
建立代理類,這裡也就是經紀人,他需要實作InvocationHandler類,並重寫invoke方法這樣當有什麼事情,要找周傑倫(具體類)的時候,就必須先到經紀人(代理類)那裡處理,代理人在決定要不要與你見面(方法要不要執行)
1.歌手接口
public abstract void sing();
public abstract String s();
}
//綁定
public Object bind(Object target){
this.target=target;
//必須放回Proxy
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
//重新
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object o =null;
System.out.println("開始交易");
System.out.println("判斷權限");
o = method.invoke(target, args);//執行方法
System.out.println("結束交易");
return o;
}
}