當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
[Spring5]AOP底层原理
生活随笔
收集整理的這篇文章主要介紹了
[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底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 避孕套漏了怎么办
- 下一篇: [Swagger2]SpringBoot