Spring框架之CGLIB的代理技術(代碼了解)


1。引入CBLIB的開發包

    * 如果想使用CGLIB的技術來生成代理對象,那么需要引入CGLIB的開發的jar包,在Spring框架核心包中已經引入了CGLIB的開發包了。所以直接引入Spring核心開發包即可!

2..創建BookDaoImpl類:

package com.huida.demo2;

public class BookDaoImpl {

    public void save(){
        System.out.println("保存圖書...");
    }
    public void update(){
        System.out.println("更新圖書...");
    }
}

3.創建代理工具類:

package com.huida.demo2;

import java.lang.reflect.Method;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

public class MycglibUtils {

    public static BookDaoImpl getProxy(){
        
        //創建CGLIB核心的類
        Enhancer enhancer=new Enhancer();
        //設置父類
        enhancer.setSuperclass(BookDaoImpl.class);
        //設置回調函數
        enhancer.setCallback(new MethodInterceptor() {
            
            @Override
            public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                if("save".equals(method.getName()))
                {
                    //記錄日志
                    System.out.println("記錄日志...");
                }
                return methodProxy.invokeSuper(obj, args);
            }
        });
        //生成代理對象
        BookDaoImpl proxy=(BookDaoImpl)enhancer.create();
        return proxy;
    }
}

4.編寫測試代碼:

package com.huida.demo2;

import org.junit.Test;

public class demo2 {

    @Test
    public void run(){
        BookDaoImpl bookDaoImpl=new BookDaoImpl();
        bookDaoImpl.save();
        bookDaoImpl.update();
        System.out.println("----------------------");
        //使用工具類獲取代理對象
        BookDaoImpl proxy=MycglibUtils.getProxy();
        proxy.save();
        proxy.update();
    }
}

5.單元測試run()方法,執行結果為:

記錄日志為通過回調函數增加的功能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM