亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java代理 jdk動態(tài)代理應(yīng)用案列

 更新時間:2012年11月28日 10:16:14   作者:  
java代理有jdk動態(tài)代理、cglib代理,這里只說下jdk動態(tài)代理,jdk動態(tài)代理主要使用的是java反射機(jī)制,需要了解的朋友可以參考下
java代理有jdk動態(tài)代理、cglib代理,這里只說下jdk動態(tài)代理,jdk動態(tài)代理主要使用的是java反射機(jī)制(既java.lang.reflect包)
原理是(歌手、經(jīng)紀(jì)人做例子):
建立一個公共的接口,比如:歌手public interface Singer;
用具體的類實(shí)現(xiàn)接口,比如:周杰倫,他是歌手所以實(shí)現(xiàn)Singer這個類,class MySinger implements Singer
建立代理類,這里也就是經(jīng)紀(jì)人,他需要實(shí)現(xiàn)InvocationHandler類,并重寫invoke方法
這樣當(dāng)有什么事情,要找周杰倫(具體類)的時候,就必須先到經(jīng)紀(jì)人(代理類)那里處理,代理人在決定要不要與你見面(該方法要不要執(zhí)行)
1、歌手接口
復(fù)制代碼 代碼如下:

public interface Singer {

public abstract void sing();

public abstract String s();
}

2、具體的歌手
復(fù)制代碼 代碼如下:

public class MySinger implements Singer {
public void sing() {
// TODO Auto-generated method stub
System.err.println("唱歌。。。。");
}
}

3、代理類(經(jīng)紀(jì)人)
復(fù)制代碼 代碼如下:

public class agent implements InvocationHandler{
public Object target;

//綁定
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("開始事務(wù)");
System.out.println("判斷權(quán)限");

o = method.invoke(target, args);//執(zhí)行方法

System.out.println("結(jié)束事務(wù)");
return o;
}
}

4、測試(為什么要間接口能,下面你會發(fā)現(xiàn)代理返回的是他們的接口類,這要一個代理類,就可以代理多個類,只要該類是同個一個接口的是實(shí)現(xiàn))
復(fù)制代碼 代碼如下:

public class Test {
public static void main(String[] args) {
//
agent a =new agent();
Singer s= (Singer) a.bind(new MySinger());
s.sing();
}
}

相關(guān)文章

最新評論