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()方法,执行结果为:

记录日志为通过回调函数增加的功能。

原文地址:https://www.cnblogs.com/wyhluckdog/p/10131180.html