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()方法,执行结果为:
记录日志为通过回调函数增加的功能。