日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Java动态代理和静态代理区别

發(fā)布時(shí)間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java动态代理和静态代理区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

靜態(tài)代理

package staticproxy;/*** 接口* @author newtouch**/
public interface IHello {public void sayHello();public String doSomethong(String s);}

  

package staticproxy;/*** 實(shí)現(xiàn)類* @author newtouch**/
public class Hello implements IHello{@Overridepublic void sayHello() {System.out.println("zhangxiongfeng");}@Overridepublic String doSomethong(String s) {return s;}}

  

package staticproxy;/*** 靜態(tài)代理類* @author newtouch**/
/*** * @author newtouch* * 問(wèn)題 如果接口中有多個(gè)方法 靜態(tài)代理中 就會(huì)有多重新代理的方法**/
public class StaticProxy {private IHello iHello;public StaticProxy(IHello iHello) {this.iHello=iHello;}public void sayHello() {iHello.sayHello();}public String doSomethong(String s) {return iHello.doSomethong(s);}}

  

package staticproxy;public class Test {public static void main(String[] args) {IHello iHello = new Hello();StaticProxy staticProxy = new StaticProxy(iHello);staticProxy.sayHello();System.out.println(staticProxy.doSomethong("zhangxiongfeng"));}}  

動(dòng)態(tài)代理:

package proxy;/*** 接口* @author newtouch**/
public interface IHello {public void sayHello();public String doSomethong(String s);}

  

package proxy;public class Hello implements IHello{@Overridepublic void sayHello() {System.out.println("zhangxiongfeng");}@Overridepublic String doSomethong(String s) {return s;}}

  

package proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class DynamicProxy implements InvocationHandler {private IHello iHello;DynamicProxy(IHello iHello) {this.iHello = iHello;}/*** 調(diào)用接口 IHello接口中的  任何方法都是要用下面的方法執(zhí)行* *  可以不用像靜態(tài)代理中 每個(gè)方法都必須重寫 */@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//  在代理真實(shí)對(duì)象前我們可以添加一些自己的操作System.out.println("before rent house");System.out.println("Method:" + method);//    當(dāng)代理對(duì)象調(diào)用真實(shí)對(duì)象的方法時(shí),其會(huì)自動(dòng)的跳轉(zhuǎn)到代理對(duì)象關(guān)聯(lián)的handler對(duì)象的invoke方法來(lái)進(jìn)行調(diào)用method.invoke(iHello, args);//  在代理真實(shí)對(duì)象后我們也可以添加一些自己的操作System.out.println("after rent house");return null;}
}

  

package proxy;import java.lang.reflect.Proxy;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubIHello iHello = new Hello();DynamicProxy dynamicProxy = new DynamicProxy(iHello);IHello hello = (IHello) Proxy.newProxyInstance(dynamicProxy.getClass().getClassLoader(), iHello.getClass().getInterfaces(), dynamicProxy);// hello.sayHello();System.out.println(hello.doSomethong("zhangxf"));}}

  動(dòng)態(tài)代理執(zhí)行:

before rent house
Method:public abstract void proxy.IHello.sayHello()
zhangxiongfeng
after rent house

package proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;public class ProxyFactory<T> {private T t;private InvocationHandler invocationHandler;public ProxyFactory(T t,InvocationHandler invocationHandler) {this.t = t;this.invocationHandler = invocationHandler;}public T newProxyInstance() {return (T)Proxy.newProxyInstance(invocationHandler.getClass().getClassLoader(), t.getClass().getInterfaces(), invocationHandler);}
}動(dòng)態(tài)工廠

  

?

轉(zhuǎn)載于:https://www.cnblogs.com/zxf330301/p/9258512.html

總結(jié)

以上是生活随笔為你收集整理的Java动态代理和静态代理区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。