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()方法,執行結果為:
記錄日志為通過回調函數增加的功能。