一、aop簡介
aop(aspect-oriented programming, 面向切面程式設計): 是一種新的方**, 是對傳統 oop(object-oriented programming, 物件導向程式設計) 的補充。
aop 的主要程式設計物件是切面(aspect), 而切面是把橫切關注點
模組化!
在應用 aop 程式設計時, 需要定義公共功能, 但可以明確的定義這個功能在**應用, 並且不必修改需要使用公共功能的類。 這樣以來橫切關注點就被模組化到特殊的物件(切面)裡.
二、aop 的好處
每個事物邏輯位於乙個位置, **不分散, 便於維護和公升級
業務模組更簡潔, 只包含核心業務**。
三、aop 術語
1. 連線點(joinpoint)
連線點描述的是程式執行的某個特定位置。如乙個類的初始化前、初始化後,或者類的某個方法呼叫前、呼叫後、方法丟擲異常後等等。乙個類或一段程式**擁有一些具有邊界性質的特定點,這些特定點就稱為連線點。連線點用來定義在目標程式的**通過aop加入新的邏輯。
spring僅支援方法的連線點,即僅能在方法呼叫前、方法呼叫後、方法丟擲異常時以及方法呼叫前後這些程式執行點織入增強。連線點由兩個資訊確定:第一是用方法表示的程式執行點;第二是用相對點表示的方位。
執行點:即程式執行流程中的某個點。如執行某個語句或者語句塊、執行某個方法、裝載某個類、丟擲某個異常……例如 :userservice#add() 方法執行之前,這個連線點。執行點為 userservice#add()方法本身; 方位為該方法執行前的位置。
2. 切入點(pointcut)
切入點是乙個連線點的過濾條件,aop 通過切點定位到特定的連線點。每個類都擁有多個連線點:例如 userservice類中的所有方法實際上都是連線點,即連線點是程式類中客觀存在的事物。模擬:連線點相當於資料庫中的記錄,切點相當於查詢條件。切點和連線點不是一對一的關係,乙個切點匹配多個連線點,切點通過 org.springframework.aop.pointcut 介面進行描述,它使用類和方法作為連線點的查詢條件。
xml配置方式:
<
aop:config
>
<
aop:pointcutid=
"mypointcut"
expression
="execution(* com.kaka.spring.aop.aspect.service.userservice.*(..))"
/>
aop:config
>
3. 通知(advice)
切面在某個具體的連線點採取的行為或行動,稱為通知。切面的核心邏輯**都寫在通知中,有人也稱之為增強或者橫切關注點。通知是切面功能的具體實現,通常是業務**以外的需求,如日誌、驗證等,這些被模組化的特殊物件。
常用的通知介面有
xml配置方式
"mymethodbeforeadvice"
class
="com.kaka.spring.aop.advice.mymethodbeforeadvice"
/>
<
aop:config
>
<
aop:pointcutid=
"mypointcut"
expression
="execution(* com.kaka.spring.aop.aspect.service.userservice.*(..))"
/>
<
aop:advisor
advice-ref
="mymethodbeforeadvice"
pointcut-ref
="mypointcut"
/>
aop:config
>
mymethodbeforeadvice這個類,實現了methodbeforeadvice前置通知介面。
4. 通知器(advisor)
通知器由乙個切入點(pointcut)和乙個通知(advice)組成。通知就是增強的那部分功能**,如記錄日誌**、控制許可權**。
<
aop:advisor
advice-ref
="mymethodbeforeadvice"
pointcut-ref
="mypointcut"
/>
5. 切面(aspect)
與通知器(advisor)類似都是通知+切入點。區別在於,切面中的類無需實現通知介面,但需要在配置檔案中指定類中的方法名;而通知器僅需指定類名即可,因為通知器中的類都實現了通知介面,很明確的知道通知方法是哪個。
xml配置方式
"myxmlaspect"
class
="com.kaka.spring.aop.aspect.myxmlaspect"
/>
<
aop:config
>
<
aop:pointcutid=
"mypointcut"
expression
="execution(* com.kaka.spring.aop.aspect.service.userservice.*(..))"
/>
<
aop:aspect
ref=
"myxmlaspect"
>
<
aop:around
method
="aroundmethod"
pointcut-ref
="mypointcut"
/>
aop:aspect
>
aop:config
>
myxmlaspect類無需實現任何通知介面,只需定義乙個aroundmethod方法即可,該方法名也可以自定義其他的。
可以理解為:切面就是自定定義的aop物件,通知就是配置中指定的該物件方法。
6. 目標(target)
被通知的物件(方法)
7. **(proxy)
向目標物件應用通知之後建立的物件
NLP專業術語
hyper parameters 在訓練模型時,有些引數是需要手動設定的,每個引數有乙個可選的範圍或者列表可供訓練,可以呼叫sklearn的gridsearchcv函式來自動統計搜尋。development set 在 中也簡寫成dev。一般在訓練模型時需要用到交叉驗證,這部分用來交叉驗證訓練的樣本...
oracle專業術語
entity實體 data 資料 attribute屬性 attribute set實體集 database資料庫 database management system,dbsm資料庫管理系統 information system 資訊系統 relational database managemen...
EDA專業術語
eda 電子設計自動化 eda,electronic design automation hdl 硬體描述語言 hdl,hardware description language vlsi 超大規模積體電路 vlsi,very large scale integration dfm rule 可製造...