日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[Spring5]AOP底层原理

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

AOP底層原理

1.AOP底層使用動態代理

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

第一種 有接口的情況,使用JDK動態代理

a.創建接口實現類代理對象,增強類的方法

第二種 沒有接口的情況,使用CGLIB動態代理

a.創建子類的代理對象,增強類的方法

AOP(JDK動態代理)

1.使用JDK動態代理,使用java.lang包中的Proxy類里面的方法創建代理對象

(1)調用newProxyInstance方法

方法有三個參數:

第一個參數,類加載器

第二個參數,增強方法所在的類,這個類實現的接口,支持多個接口

第三個參數,實現這個接口InvocationHandler,創建代理對象,寫增強的部分

2.編寫JDK動態代理代碼

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

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

(2)創建接口實現類,實現方法

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類創建接口代理對象

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){//創建接口實現類代理對象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);} }//創建代理對象代碼 class UserDaoProxy implements InvocationHandler {//1.創建的是誰的代理對象,把誰傳遞過來//有參構造傳遞private Object obj;public UserDaoProxy(Object obj){this.obj = obj;}//增強的邏輯@Overridepublic Object invoke(Object o, Method method, Object[] objects) throws Throwable {//方法之前System.out.println("方法之前執行..."+method.getName()+"傳遞的參數..."+ Arrays.toString(objects));//被增強的方法執行Object res = method.invoke(obj, objects);//方法之后System.out.println("方法之后執行..."+obj);return res;} }

總結

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

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