一、 aop(aspect oriented programming),即面向切面程式設計,是oop(object oriented programming,物件導向程式設計)的補充和完善。
aop中的機制:橫向切面機制:將核心功能與非核心功能隔離,在不修改原始碼的情況下,只在需要用到非核心功能時動態新增非核心功能。
aop中幾個重要的概念:
1、連線點:類中能夠(需要)被增強的方法稱為連線點
2、切點 : 類中實際被增強的方法稱為切入點。
3、通知/增強(advice):在切入點實現增強的功能(方法)。分前置、後置、環繞、異常、最終(後置通知之後)通知五類。
4、切面(aspect):切面可以是切點+增強。或者
舉例說明:
方法addemp()、deleteemp()、insertemp()都可以稱為連線點,addempp()是需要增強功能的方法,稱為切點。
切點與連線點的關係:連線點可能是切點,切點一定是連線點。
logger類即是切面,切面裡的方法before()、after()、finals()即為通知/增強。
aop實現
:一、配置實現
1、匯入約束檔案、配置xml檔案
<?xml version="1.0" encoding="utf-8"?>
2、bean物件
package org.lanqiao.aop;
public class empservice
}
3、aop-切面
package org.lanqiao.aop;
import org.aspectj.lang.proceedingjoinpoint;
import org.springframework.stereotype.component;
//增強的業務
public class logger
//後置增強
public void after()
//環繞增強(必須帶引數)
public void around(proceedingjoinpoint joinport) catch (throwable e)
system.out.println("around-2");
} //最終增強
public void finals()
}
4、測試
package org.lanqiao.test;
import org.junit.test;
import org.lanqiao.aop.empservice;
public class testaop
}
5、測試結果
1、在切點加入前置、後置、最終增強
結果:
before
核心業務
after-returning
after
2、在切點加入前置、後置、環繞增強
結果:
before
around-1
核心業務
around-2
after-returning
補充:*萬用字元
配置切點execution(* org.lanqiao.aop.empservice.addemp())" ----其中全路徑+方法名()為指定方法名()(addemp())為切點。
execution(* org.lanqiao.aop.empservice.*(..))"------*(..)表示empservice中連線點都可以作為切點
execution(* org.lanqiao.aop.*.*(..))"----表示org.lanqiao.aop包下所以連節點都可以作為切點
二、註解實現
<?xml version="1.0" encoding="utf-8"?>
然後在類中加註解
@component //bean 共4個註解功能一樣只是名字不一樣
@aspect //定義切面
@pointcut//定義切點
@增強的標籤名(切點)
AOP概念理解
aop 的全稱是 aspect oriented programming 在網上很多地方都將 aop翻譯成 面向方面程式設計 我覺得這樣的翻譯不利於對aop概念的理解,在中文中,如果 方面 前面沒有修飾詞,方面 是乙個沒有意義的詞語。面向方面程式設計 那這個 方面 是什麼?我覺得將aspect翻譯成...
spring 對AOP的理解
jdk cglib 第三方的工具庫,建立 物件,原理是繼承,通過繼承目標類建立子類,子類就是 物件 cglib要求目標類不能是final的 方法也不能是final的 可以在目標類源 不改變的情況下去增加功能 減少重複 專注業務邏輯 解耦合,讓你的業務功能和日誌,事務非業務功能分離 對aop面向切面程...
Spring 概念理解
ioc 就是把建立物件的工作交給spring來生成,處理,裝配ioc的建立時機 在xml配置檔案載入的時候,容器中的管理物件就初始化了di依賴注入 是實現ioc的一種方法。comment 但是這個註解可以有多重命名,來適應mvc結構 小結 xml和註解 xml更加靈活多功能,方便配置,能夠配置所有b...