spring核心思想一之AOP

1.什麼是AOP

面向切面編程,與OOP(面向對象編程)對比,AOP,是處理一些橫切性問題,但這些橫切性問題不會影響到主邏輯的實現,例如:日誌記錄。但是會散落到代碼的各個部分,難以維護。AOP就是把這些問題和業務邏輯分開,達到與主業務邏輯解耦的目的。

2.AOP的實現原理

1是通過動態代理實現,JDK動態代理和cglib動態代理。2這兩種動態代理實現選擇主要是根據橫切的是 接口,還是 class類,如果是接口 那麼就是jdk的動態代理,返回的是接口的實例;
如果是class類,那麼就是cglib的動態代理創建的代理實類;
3這些代理實例通過class字節碼文件解析(jvm指令解析字節碼文件),流導入,創建代理實例,
java 動態代理爲啥必須是接口?
因爲代理類已經繼承了Proxy類,java是單繼承多實現,所以我們被代理對象必須是接口(生成字節碼文件的時候發現已經繼承了Proxy)

查看spring源碼可以看到
執行流程圖
執行流程

3.AOP作用

1-降低模塊之間的耦合度。
2-使系統容易擴展。
3-更好的代碼複用

4AOP如何使用

查看官方網頁Spring官方文檔說明

4.1aop需要理解的概念

AspectJ和Spring AOP 是AOP的兩種實現方案,Aspectj是aop的java實現方案,是一種編譯期的用註解形式實現的AOP;Spring aop是aop實現方案的一種,它支持在運行期基於動態代理的方式將aspect織入目標代碼中來實現aop,其中動態代理有兩種方式(jdk動態代理和cglib動態代理),這裏不展開說。這裏有幾個概念,需要正確理解:

joinPoint:連接點。在spring中只支持方法連接點,連接點指的是可以使用advice(增強)的地方,例如一個類中有5個方法,那麼這5個方法,那麼這5個方法都

可以是連接點。

pointcut:切點。可理解爲實實在在的連接點,即切入advice(增強)的點。例如一個類中有5個方法,其中有3個方法(連接點)需要織入advice(增強),那麼這3個需要織入advice的連接點就是切點。

advice:增強。實際中想要添加的功能,如日誌、權限校驗。

advisor:切面。由切點和增強相結合而成,定義增強應用到哪些切點上。

4.2.環繞

//通過ProceedingJoinPoint想要獲取當前執行的方法:
//pointcut execution(* powerx.io.StudentService.*(..))
//or    @Around("@annotation(powerx.io.Mylog)&&execution(* powerx.io.StudentService.*(..))")

@Around(pointcut)
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
       //方法
        Object target = joinPoint.getTarget().getClass().getName();
        System.out.println("調用者+"+target);
       //通過joinPoint.getArgs()獲取Args參數
        Object[] args = joinPoint.getArgs();
        //2.傳參  
        System.out.println("2.傳參:----"+args[0]);  
         for (Object object : args) {
            System.out.println(object instanceof HttpServletRequest);
        }
        
        return joinPoint.proceed();
        
    }

如何實現spring項目中使用AOP參考
參考博客

5AOP使用場景

Authentication 權限

Caching 緩存

Context passing 內容傳遞

Error handling 錯誤處理

Lazy loading 懶加載

Debugging  調試

logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準

Performance optimization 性能優化

Persistence  持久化

Resource pooling 資源池

Synchronization 同步

Transactions 事務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章