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

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

Spring框架之CGLIB的代理技术(代码了解)

上一篇:python解释 yield 和 Generators(生成器)


下一篇:2016年 CodePen 最热门的前端代码 Top 100