當前位置:
首頁 >
动态代理学习小案例
發布時間:2025/7/14
17
豆豆
1 package edu.nf.utils;
2
3 import edu.nf.dao.UserDao;
4 import edu.nf.dao.UserInvocationhandler;
5 import org.apache.ibatis.session.SqlSession;
6
7 import java.lang.reflect.InvocationHandler;
8 import java.lang.reflect.Proxy;
9
10 /**
11 * 代理工具
12 * @Author LQY
13 * @Date 2018/10/15
14 */
15 public class ProxyUtil {
16 /**
17 * 在使用mybatis前提下,獲取操作數據庫dao的實現類的代理對象
18 * @param clazz dao接口的class對象
19 * @return
20 */
21 public static Object getProxy(Class<?> clazz){
22 SqlSession sqlSession = MyBatisUtil.getSqlSession();
23 Object dao = sqlSession.getMapper(clazz);
24 try {
25 InvocationHandler handler = new DaoInvocationhandler(dao);
26 return Proxy.newProxyInstance(clazz.getClassLoader(), dao.getClass().getInterfaces(), handler);
27 } catch (Exception e) {
28 e.printStackTrace();
29 }
30 return null;
31 }
32 } package edu.nf.dao;import edu.nf.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;/*** 回調處理器* @Author LQY* @Date 2018/10/15*/
public class DaoInvocationhandler implements InvocationHandler{private Object target ;public UserInvocationhandler(Object target){this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object obj = null;SqlSession sqlSession = MyBatisUtil.getSqlSession();try {obj = method.invoke(target,args);//提交事務
sqlSession.commit();} catch (Exception e) {e.printStackTrace();//回滾事務
sqlSession.rollback();}finally {//釋放SqlSession
sqlSession.close();}return obj;}
} View Code
代理類可以在運行時創建全新的類 。 這樣的
代理類能夠實現指定的接口
。 尤其是 , 它具有下列方法 :
? 指定接口所需要的全部方法 。
? Object
類中的全部方法 , 例如 , toString 、 equals 等
。
然而
, 不能在運行時定義這些方法的新代碼 。 而是要提供一個調用處理器 ( invocation
handler ) 。 調用處理器是實現了 InvocationHandler 接口的類對象 。 在這個接口中只有一個方法 :
Object invoke ( Object proxy , Method method , Object □ args )
無論何時調用代理對象的方法
, 調用處理器的
invoke 方法都會被調用 , 并向其傳遞
Method 對象和原始的調用參數 。 調用處理器必須給出處理調用的方式 。
?
?
要使用上面這個小工具必須要有這兩個類。
學習動態代理的小案例工具,寫得不好請多多指教!
轉載于:https://www.cnblogs.com/nisiweiLIQIYONG/p/9797081.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 试除法的妙用【O(√N) 复杂度】
- 下一篇: MES系统实施4大关键点,您都知道吗?