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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

proxy connect abort处理方法_Java代理设计模式(Proxy)的几种具体实现

發(fā)布時間:2023/12/19 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 proxy connect abort处理方法_Java代理设计模式(Proxy)的几种具体实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Proxy是一種結構設計模型,主要解決對象直接訪問帶來的問題,代理又分為靜態(tài)代理和動態(tài)代理(JDK代理、CGLIB代理。

靜態(tài)代理:又程序創(chuàng)建的代理類,或者特定的工具類,在平時開發(fā)中經常用到這種代理模式,這種一般在程序運行前就已經生成對應的class文件;

動態(tài)代理:在程序運行時通過反射機制動態(tài)創(chuàng)建。

下面通過一個場景實現以下三種代理方式

  • 步驟一:定義商店接口(Subject)
  • 步驟二:個人店家運營(RealSubject)
  • 步驟三:平臺運營(proxy)
  • 步驟四:個體消費(client)

幾種代理方式都會用到Subject、RealSubject,現在這里定義

Store.java(Subject):定義兩個接口operate(運營),business(交易)。

public interface Store { /** * 店鋪運營 */ public void operate(); /** * 店鋪交易 */ public void business();}

PersonStore.java(RealSubject) 單個用戶運營

public class PersonStore implements Store { @Override public void operate() { System.out.println("個人商店運營"); } @Override public void business() { System.out.println("個人商店交易"); }}

靜態(tài)代理

靜態(tài)代理的實現比較簡單,代理類通過實現與目標對象相同的接口,并在類中維護一個代理對象,這種場景用于個體商家比較少的情況,如果多的話代理類十分繁多、不易維護

創(chuàng)建靜態(tài)代理類

ProxyStroe.java(proxy):在代理平臺運營是收取管理費用100,這個代理類需要實現Store接口,并制定目標類target(PersonStore)。

public class ProxyStroe implements Store{ private Store personStore = new PersonStore(); @Override public void operate() { System.out.println("收取管理費用100元"); personStore.operate(); } @Override public void business() { personStore.business(); }}

靜態(tài)代理調用

StaticConsumer.java(client):通過創(chuàng)建ProxyStroe去代理PersonStore,并進行操作。

public class StaticConsumer { public static void main(String[] args) { ProxyStroe store = new ProxyStroe(); store.operate(); store.business(); }}

動態(tài)代理

JDK代理

動態(tài)代理類是通過接口實現的,利用攔截器(攔截器必須實現InvocationHanlder)加上反射機制生成一個實現代理接口的匿名類,

在調用具體方法前調用InvokeHandler來處理。

創(chuàng)建jdk代理類

JDKStoreHandler.java(proxy):通過實現InvocationHandler接口的invoke方法,在里面進行反射調用,newProxyInstanse通過目標對象創(chuàng)建真是對象。

public class JDKStoreHandler implements InvocationHandler { /** * 目標對象 */ private Object targetObject; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if("operate".equals(method.getName())){ System.out.println("收取管理費用100元"); } return method.invoke(targetObject, args); } /** * * @param targetObject * @return */ public Object newProxyInstanse(Object targetObject){ this.targetObject = targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),targetObject.getClass().getInterfaces(),this); }}

JDK代理對象調用

JDKDynamicConsumer.java(proxy):通過JDKStoreHandler的newProxyInstanse創(chuàng)建真實目標對象,并調用接口的方法

public class JDKDynamicConsumer { public static void main(String[] args) { Store store = (Store)new JDKStoreHandler().newProxyInstanse(new PersonStore()); store.operate(); store.business(); }}

CGLIB代理

cglib動態(tài)代理是利用asm開源包,對代理對象類的class文件加載進來,通過修改其字節(jié)碼生成子類來處理。

創(chuàng)建cglib代理對象

CglibProxy.java(proxy):需要實現MethodInterceptor的intercept方法,并進行反射調用。通過createProxyObject創(chuàng)建真實對象,這里是根據目標對象直接生成對象。

public class CglibProxy implements MethodInterceptor{ /** * CGlib需要代理的目標對象 */ private Object targetObject; public Object createProxyObject(Object targetObject){ this.targetObject = targetObject; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(targetObject.getClass()); enhancer.setCallback(this); Object proxyObj = enhancer.create(); return proxyObj; } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { if("operate".equals(method.getName())){ System.out.println("收取管理費用100元"); } return method.invoke(targetObject, objects); }}

CGLib代理對象調用

CglibDynamicConsumer.java(client):通過CglibProxy的createProxyObject創(chuàng)建真實目標對象,對進行方法調用

public class CglibDynamicConsumer { public static void main(String[] args) { Store store = (Store)new CglibProxy().createProxyObject(new PersonStore()); store.operate(); store.business(); }}

總結

以上是生活随笔為你收集整理的proxy connect abort处理方法_Java代理设计模式(Proxy)的几种具体实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。