最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 動態(tài)代理實現(xiàn)代碼實例

 更新時間:2019年09月06日 14:50:20   作者:lostControl  
這篇文章主要介紹了Spring 動態(tài)代理實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了Spring 動態(tài)代理實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

基于jdk實現(xiàn)的動態(tài)代理

package com.proxy.daili;
import com.proxy.daili.service.IModelMath;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
/**
 * 動態(tài)代理模式類
 * 第一種代理模式:Jdk動態(tài)代理
 *  注意:實現(xiàn)InvocationHandler這個接口
 *
 *  基于接口的
 */
public class JdkDynamicProxy implements InvocationHandler {
 //定義需要代理的接口
 protected IModelMath iModelMath;

 //將需要代理的接口作為參數(shù)傳入到動態(tài)代理設計模式類中
 public JdkDynamicProxy(IModelMath iModelMath){
  this.iModelMath = iModelMath;
 }
 /**
  * 生成代理對象
  * 使用java.lang.reflect.Proxy這個類調用newProxyInstance方法
  * 返回 動態(tài)代理類對象
  */
 public IModelMath iModelMathmethod(){
  IModelMath iModelMathProxy = (IModelMath) Proxy.newProxyInstance(iModelMath.getClass().getClassLoader(),
    iModelMath.getClass().getInterfaces(),
    this);
  return iModelMathProxy;
 }
 /**
  * 開始做代理的操作
  * Object proxy 代理對象的引用
  * Method method 當前執(zhí)行的方法
  * Object[] args 當前執(zhí)行方法的參數(shù)
  * 返回 與被代理對象返回的值相同
  */
 @Override
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  System.out.println("你調用的方法為:"+method.getName());
  System.out.println("你調用的方法參數(shù)有:"+ Arrays.toString(args));
  Object invoke = method.invoke(iModelMath, args);
  System.out.println("方法的返回數(shù)據(jù):"+invoke);
  return invoke;
 }
}
package com.proxy.test;
import com.proxy.daili.service.IModelMath;
import com.proxy.daili.JdkDynamicProxy;
import com.proxy.daili.service.ModelMath;
import org.junit.Test;
public class TestJDKDynamicProxy {
 /**
  * 使用jdk方式的動態(tài)代理
  * 測試
  */
 @Test
 public void testJdkDynamicProxy(){
  //需要被代理的動態(tài)對象
  IModelMath imm = new ModelMath();
  //代理對象
  IModelMath math = new JdkDynamicProxy(imm).iModelMathmethod();
  //通過代理對象做操作
  int addition = math.addition(10, 2);
  int subtraction = math.subtraction(20, 19);
  System.out.println("實際方法的數(shù)據(jù)為:"+addition);
  System.out.println("實際方法的數(shù)據(jù)為:"+subtraction);
 }
}

基于gcLib實現(xiàn)的動態(tài)代理

package com.proxy.daili;
import com.proxy.daili.service.IModelMath;
import com.proxy.daili.service.ModelMath;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
 * cglib動態(tài)代理設計類
 * 前提必須要先導入 cglib 包
 * 基于 實現(xiàn)類的
 */
public class CglibDynamicProxy implements MethodInterceptor {
 //定義被代理的實現(xiàn)類(注意這 是實現(xiàn)類,不是接口)
 private ModelMath modelMath;

 //將被代理的對象作為參數(shù) 傳入到 cglib動態(tài)代理設計類中
 public CglibDynamicProxy(ModelMath modelMath){
  this.modelMath = modelMath;
 }
 //生成代理對象
 public ModelMath getProxyModelMath(){
  //new 一個Enhancer對象
  Enhancer enhancer = new Enhancer();
  //指定他的父類(注意這 是實現(xiàn)類,不是接口)
  enhancer.setSuperclass(ModelMath.class);
  //指定真正做事情的回調方法
  enhancer.setCallback(this);
  //生成代理類對象
  ModelMath o = (ModelMath) enhancer.create();
  //返回
  return o;
 }
 /**
  * 執(zhí)行被代理的任何方法,都會經(jīng)過這個方法
  * @param o
  * @param method
  * @param objects
  * @param methodProxy
  * @return
  * @throws Throwable
  */
 @Override
 public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
  System.out.println("通過gclib 動態(tài)代理調用的方法名為:"+method.getName());
  System.out.println("通過gclib 動態(tài)代理調用的方法的參數(shù)包含:"+ Arrays.toString(objects));
  Object invoke = method.invoke(modelMath, objects);
  System.out.println("通過gclib 動態(tài)代理調用的方法返回的數(shù)據(jù):"+ invoke);
  return invoke;
 }
}
package com.proxy.test;

import com.proxy.daili.CglibDynamicProxy;
import com.proxy.daili.service.ModelMath;
import org.junit.Test;

public class TestCgLibDynamicProxy {
 /**
  * 使用gclib方式的動態(tài)代理
  * 測試
  */
 @Test
 public void testCglibDynamicProxy(){
  ModelMath modelMath = new ModelMath();
  ModelMath proxyModelMath = new CglibDynamicProxy(modelMath).getProxyModelMath();
  int subtraction = proxyModelMath.subtraction(1, 44);
  int addition = proxyModelMath.addition(10, -1);
  System.out.println("執(zhí)行減法得到的正式數(shù)據(jù)為:"+subtraction);
  System.out.println("執(zhí)行加法得到的正式數(shù)據(jù)為:"+addition);
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java如何在臨界區(qū)中避免競態(tài)條件

    Java如何在臨界區(qū)中避免競態(tài)條件

    這篇文章主要介紹了Java如何在臨界區(qū)中避免競態(tài)條件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • mybatis使用pagehelper插件過程詳解

    mybatis使用pagehelper插件過程詳解

    這篇文章主要介紹了mybatis使用pagehelper插件過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • VS?Code中運行Java?SpringBoot的項目詳細步驟

    VS?Code中運行Java?SpringBoot的項目詳細步驟

    這篇文章主要介紹了VS?Code中運行Java?SpringBoot項目的相關資料,文中涵蓋了安裝必要的擴展、配置環(huán)境、創(chuàng)建或導入項目、配置調試環(huán)境、運行和調試項目、使用Spring?Boot?Actuator以及配置任務自動化等步驟,需要的朋友可以參考下
    2024-12-12
  • 如何用Stream解決兩層List屬性求和問題

    如何用Stream解決兩層List屬性求和問題

    這篇文章主要介紹了如何用Stream解決兩層List屬性求和問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 創(chuàng)建Spring Boot項目的幾種方式總結(推薦)

    創(chuàng)建Spring Boot項目的幾種方式總結(推薦)

    這篇文章主要介紹了創(chuàng)建Spring Boot項目的幾種方式總結(推薦),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • springcloud使用feign調用服務時參數(shù)內(nèi)容過大問題

    springcloud使用feign調用服務時參數(shù)內(nèi)容過大問題

    這篇文章主要介紹了springcloud使用feign調用服務時參數(shù)內(nèi)容過大問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • ActiveMQ結合Spring收發(fā)消息的示例代碼

    ActiveMQ結合Spring收發(fā)消息的示例代碼

    這篇文章主要介紹了ActiveMQ結合Spring收發(fā)消息的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • springboot集成mybatis-plus全過程

    springboot集成mybatis-plus全過程

    本文詳細介紹了如何在SpringBoot環(huán)境下集成MyBatis-Plus,包括配置maven依賴、application.yaml文件、創(chuàng)建數(shù)據(jù)庫和Java實體類、Mapper層、Service層和Controller層的設置,同時,還涵蓋了時間自動填充、分頁查詢、多對一和一對多的數(shù)據(jù)庫映射關系設置
    2024-09-09
  • Spring中@Value使用詳解及SPEL表達式

    Spring中@Value使用詳解及SPEL表達式

    這篇文章主要介紹了Spring中@Value使用詳解及SPEL表達式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • response對象的使用(實例講解)

    response對象的使用(實例講解)

    下面小編就為大家?guī)硪黄猺esponse對象的使用(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

松潘县| 安远县| 黄浦区| 邯郸市| 林芝县| 大埔区| 海宁市| 仙桃市| 顺义区| 林口县| 中牟县| 大埔县| 右玉县| 叙永县| 渭源县| 都兰县| 三穗县| 怀仁县| 乌鲁木齐县| 金门县| 滁州市| 白城市| 岑溪市| 鹰潭市| 嵊州市| 平泉县| 肃北| 都江堰市| 万全县| 台南县| 阳山县| 平舆县| 高阳县| 巨鹿县| 蒙山县| 西丰县| 马公市| 清河县| 宜宾县| 唐山市| 武冈市|