鏈接點是程序執行的某個特定的位置,如類開始初始化前、類初始化後、累的某個方法調用前/調用後、方法拋出異常後。spring
spring僅支持方法的鏈接點,也就是:數據庫
切點和鏈接點不是一對一的關係,一個切點能夠匹配多個鏈接點。框架
鏈接點至關於數據庫中的記錄,切點至關於查詢條件。代理
在spring中,切點經過org.springframework.aop.Pointcut接口進行描述,它使用類和方法做爲鏈接點的查詢條件對象
加強是織入目標類鏈接點上的一段程序代碼接口
加強邏輯的織入目標類get
引介是一種特殊的加強,它爲類添加一些屬性和方法。編譯器
織入是將加強添加到目標類的具體鏈接點上的過程。AOP有三種織入方式io
spring 採用動態代理織入,AspectJ採用編譯期織入和類裝在期織入編譯
一個類被AOP織入加強後,就產生了一個結果類,它是融合了原類好加強邏輯的代理類。根據不一樣的代理方式,代理類很可能是和原類具備相同接口的類,也可能就是原類的子類,因此能夠採用與調用原類相同的方式調用代理類。
切面由切點和加強組成,它既包括橫切邏輯的定義,也包括鏈接點的定義。
spring aop 就是負責實施切面的框架,它將切面所定義的橫切邏輯織入切面所指定的鏈接點中。
aop的工做中心在於如何將加強英語與目標對象的連接點上。這包括兩項工做:
動態代理
spring aop 提供了兩種代理機制
基於JDK的動態代理
基於CGLIB的動態代理
提供這兩種代理機制是由於JDK自己值提供接口的代理,不支持類的代理