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

Aop動態(tài)代理和cglib實現(xiàn)代碼詳解

 更新時間:2020年12月07日 09:52:11   作者:夢澤千秋  
這篇文章主要介紹了Aop動態(tài)代理和cglib實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一般我們使用Aop對象時,常用動態(tài)代理模式,即是采用映射一個相同的類在此基礎(chǔ)上進(jìn)行前置后置操作。

動態(tài)代理多是采用原類實現(xiàn)父類接口,然后動態(tài)代理一個和原類相同的雙胞胎兄弟類來實現(xiàn)映射。

父類

public interface InterF {
  public void save();
}

需要映射的類

public class Origin implements InterF{
  @Override
  public void save() {
    System.out.println("測試一下");
  }
}

動態(tài)代理映射,此類需要傳入相應(yīng)的原類對象

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author bai
 * @create 2019-10-25-16:47
 */
public class ProxyJdk implements InvocationHandler {

  private Object target;

  public Object getProxy(Object target){
    this.target=target;
    return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);

  }

  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

    System.out.println("我來了");
    Object invoke = method.invoke(target, args);
    System.out.println("我走了");
    return invoke;
  }
}

測試類

public class Mytest {
  public static void main(String[] args) {
    Origin o=new Origin();
    ProxyJdk pj=new ProxyJdk();
    InterF proxy = (InterF) pj.getProxy(o);

    proxy.save();
  }
}

復(fù)制代碼

cglib模式的代理和動態(tài)代理大同小異,模式上相同,但cglib采用的是直接實現(xiàn)父子類,繼承原類來實現(xiàn)映射。

原類

public class Origin{
  public void save() {
    System.out.println("測試一下");
  }
}

cglib映射類,此類也需要傳入原類

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * @author bai
 * @create 2019-10-25-17:26
 */
public class CglibProxy implements MethodInterceptor{
  private Object target;//被代理目標(biāo)

  public Object getProxy(Object target){
    this.target=target;
    Enhancer enhancer = new Enhancer();
//1.設(shè)置基類
    enhancer.setSuperclass(target.getClass());
//2.設(shè)置回調(diào)接口
    enhancer.setCallback(this);//MethodInterceptor實現(xiàn)類
//3.創(chuàng)建動態(tài)代理
    return enhancer.create();
  }
  @Override
  public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
    System.out.println("準(zhǔn)備前");
    Object invoke = method.invoke(target, objects);
    System.out.println("準(zhǔn)備后");
    return invoke;
  }
}

o是傳入的對象,method是相應(yīng)的切點所切方法,objects即參數(shù)。

測試類

public class Mytest2 {
  public static void main(String[] args) {
    Origin o=new Origin();
    CglibProxy cp=new CglibProxy();
    Origin proxy = (Origin) cp.getProxy(o);
    proxy.save();
  }
}

cglib相對于動態(tài)代理少了一個父類,更加便捷。且cglib使用時需要導(dǎo)入相應(yīng)的jar包

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

相關(guān)文章

  • 基于IDEA建立module操作步驟解析

    基于IDEA建立module操作步驟解析

    這篇文章主要介紹了基于IDEA建立module操作步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • springboot集成redis實現(xiàn)簡單秒殺系統(tǒng)

    springboot集成redis實現(xiàn)簡單秒殺系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了springboot集成redis實現(xiàn)簡單秒殺系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java獲取時間的方法總結(jié)

    java獲取時間的方法總結(jié)

    以下是對java中獲取時間的幾種方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • JavaSE經(jīng)典小練習(xí)項目之拷貝文件夾

    JavaSE經(jīng)典小練習(xí)項目之拷貝文件夾

    文件拷貝是一個常見的任務(wù),無論是備份文件,還是將文件從一個位置復(fù)制到另一個位置,文件拷貝都是必不可少的,這篇文章主要給大家介紹了關(guān)于JavaSE經(jīng)典小練習(xí)項目之拷貝文件夾的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • mybatis多對多查詢的實現(xiàn)(xml方式和注解方式)

    mybatis多對多查詢的實現(xiàn)(xml方式和注解方式)

    本文主要介紹了mybatis多對多查詢的實現(xiàn),有xml方式和注解方式兩種,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • SpringCloudGateway網(wǎng)關(guān)處攔截并修改請求的操作方法

    SpringCloudGateway網(wǎng)關(guān)處攔截并修改請求的操作方法

    這篇文章主要介紹了SpringCloudGateway網(wǎng)關(guān)處攔截并修改請求的操作方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • Java使用正則表達(dá)式實現(xiàn)找出數(shù)字功能示例

    Java使用正則表達(dá)式實現(xiàn)找出數(shù)字功能示例

    這篇文章主要介紹了Java使用正則表達(dá)式實現(xiàn)找出數(shù)字功能,結(jié)合實例形式分析了Java針對數(shù)字的匹配查找及非數(shù)字替換操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-03-03
  • Java中的同步非阻塞IO模型詳解

    Java中的同步非阻塞IO模型詳解

    這篇文章主要介紹了Java中的同步非阻塞IO模型詳解,同步非阻塞IO模型,我們能夠知道,用戶線程一直發(fā)送請求,內(nèi)核一直都能都夠返回 ,直到內(nèi)核完成準(zhǔn)備數(shù)據(jù)、數(shù)據(jù)拷貝的工作,并且返回成功的指示,在此過程中用戶線程不是阻塞的狀態(tài),需要的朋友可以參考下
    2024-01-01
  • Java如何調(diào)用wsdl的webservice接口

    Java如何調(diào)用wsdl的webservice接口

    這篇文章主要介紹了Java如何調(diào)用wsdl的webservice接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot自動裝配原理小結(jié)

    SpringBoot自動裝配原理小結(jié)

    Spring Boot主要作用就是簡化Spring應(yīng)用的開發(fā),開發(fā)者只需要通過少量代碼就可以創(chuàng)建一個Spring應(yīng)用,而達(dá)到這一目的最核心的思想就是約定優(yōu)于配置。
    2021-05-05

最新評論

长汀县| 吉木萨尔县| 会理县| 巴彦淖尔市| 犍为县| 泉州市| 响水县| 东港市| 合阳县| 南城县| 前郭尔| 宁陵县| 萨嘎县| 阿瓦提县| 新龙县| 澄江县| 晋城| 长丰县| 保靖县| 东台市| 青冈县| 莆田市| 东城区| 米泉市| 墨脱县| 理塘县| 象州县| 喀喇| 中牟县| 泉州市| 子洲县| 尉氏县| 潞西市| 温州市| 静海县| 玉山县| 本溪市| 黔江区| 河北区| 大丰市| 盐城市|