> `AOP`
* `AOP`將每一個方法調用,即**連接點**作為編程的入口,針對方法調用進行編程。從執行的邏輯上來看,相當于在之前縱向的按照時間軸執行的程序橫向切入。相當于將之前的程序橫向切割成若干的面,即`Aspect`.每個面被稱為**切面**。
* 因為切面本質上是每一個方法調用,選擇切面的過程實際上就是選擇方法的過程。那么,被選擇的**切面**(`Aspect`)在`AOP`術語里被稱為**切入點**(`Point Cut`). 切入點實際上也是從所有的**連接點**(`Join point`)挑選自己感興趣的連接點的過程。
* `Spring AOP`框架中通過 方法匹配表達式來表示**切入點**(`Point Cut`)。

<br/>
> ### 連接點 `Joinpoint`
```
public interface Joinpoint {
/** 用于執行攔截器鏈中的下一個攔截器邏輯 */
Object proceed() throws Throwable;
Object getThis();
AccessibleObject getStaticPart();
}
```
<br/>
> ### 切點`Pointcut`
```
public interface Pointcut {
/** 返回一個類型過濾器 */
ClassFilter getClassFilter();
/** 返回一個方法匹配器 */
MethodMatcher getMethodMatcher();
Pointcut TRUE = TruePointcut.INSTANCE;
}
```
<br/>
> ### 通知 `Advice`
* 前置通知(Before advice)- 在目標方便調用前執行通知
* 后置通知(After advice)- 在目標方法完成后執行通知
* 返回通知(After returning advice)- 在目標方法執行成功后,調用通知
* 異常通知(After throwing advice)- 在目標方法拋出異常后,執行通知
* 環繞通知(Around advice)- 在目標方法調用前后均可執行自定義邏輯
<br/>
> ### 切面 `Aspect`
<br/>
> ### 織入 `Weaving`
<br/>
<br/>
***
參考:
[《Spring設計思想》AOP設計基本原理](https://blog.csdn.net/luanlouis/article/details/51095702)
[Spring-AOP-源碼分析系列文章導讀](http://www.tianxiaobo.com/2018/06/17/Spring-AOP-%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0%E5%AF%BC%E8%AF%BB/)
- asD
- Java
- Java基礎
- Java編譯器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞隊列
- java語法
- String.format()
- JVM
- JVM內存、對象、類
- JVM GC
- JVM監控
- 多線程
- 基礎概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 線程池
- Spring
- IOC
- 特性介紹
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring處理請求的過程
- 注解
- 微服務
- 服務注冊與發現
- etcd
- zk
- 大數據
- Java_spark
- 基礎知識
- Thrift
- hdfs
- 計算機網絡
- OSI七層模型
- HTTP
- SSL
- 數據庫
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 數據結構/算法
- 排序算法
- 快排
- 插入排序
- 歸并排序
- 堆排序
- 計算時間復雜度
- leetcode
- LRU緩存
- B/B+ 樹
- 跳躍表
- 設計模式
- 單例模式
- 裝飾者模式
- 工廠模式
- 運維
- git
- 前端
- thymeleaf
- 其他
- 代碼規范
- work_project
- Interview