日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

[Spring5]AOP底层原理

發(fā)布時間:2023/12/4 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Spring5]AOP底层原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AOP底層原理

1.AOP底層使用動態(tài)代理

(1)有兩種情況動態(tài)代理

第一種 有接口的情況,使用JDK動態(tài)代理

a.創(chuàng)建接口實現(xiàn)類代理對象,增強類的方法

第二種 沒有接口的情況,使用CGLIB動態(tài)代理

a.創(chuàng)建子類的代理對象,增強類的方法

AOP(JDK動態(tài)代理)

1.使用JDK動態(tài)代理,使用java.lang包中的Proxy類里面的方法創(chuàng)建代理對象

(1)調用newProxyInstance方法

方法有三個參數(shù):

第一個參數(shù),類加載器

第二個參數(shù),增強方法所在的類,這個類實現(xiàn)的接口,支持多個接口

第三個參數(shù),實現(xiàn)這個接口InvocationHandler,創(chuàng)建代理對象,寫增強的部分

2.編寫JDK動態(tài)代理代碼

(1)創(chuàng)建接口,定義方法

package com.atguigu.spring.dao;public interface UserDao {public int add(int a,int b);public String update(String id );}

(2)創(chuàng)建接口實現(xiàn)類,實現(xiàn)方法

package com.atguigu.spring.dao;public class UserDaoImpl implements UserDao {@Overridepublic int add(int a, int b) {return a+b;}@Overridepublic String update(String id) {return id;} }

(3)使用Proxy類創(chuàng)建接口代理對象

package com.atguigu.spring.dao;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Arrays;public class JDKProxy {public static void main(String[] args){//創(chuàng)建接口實現(xiàn)類代理對象Class[] interfaces = {UserDao.class};UserDaoImpl userDao = new UserDaoImpl();UserDao dao = (UserDao)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));int result = dao.add(1, 2);System.out.println(result);} }//創(chuàng)建代理對象代碼 class UserDaoProxy implements InvocationHandler {//1.創(chuàng)建的是誰的代理對象,把誰傳遞過來//有參構造傳遞private Object obj;public UserDaoProxy(Object obj){this.obj = obj;}//增強的邏輯@Overridepublic Object invoke(Object o, Method method, Object[] objects) throws Throwable {//方法之前System.out.println("方法之前執(zhí)行..."+method.getName()+"傳遞的參數(shù)..."+ Arrays.toString(objects));//被增強的方法執(zhí)行Object res = method.invoke(obj, objects);//方法之后System.out.println("方法之后執(zhí)行..."+obj);return res;} }

總結

以上是生活随笔為你收集整理的[Spring5]AOP底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。