1.通知(Advice)
就是你想要的功能枪孩,也就是安全憔晒,事物藻肄,日志等。你給先定義好把拒担,然后在想用的地方用一下嘹屯。
2.連接點(JoinPoint)
這個更好解釋了,就是spring允許你使用通知的地方从撼,那可真就多了州弟,基本每個方法的前,后(兩者都有也行)低零,或拋出異常時都可以是連接點婆翔,spring只支持方法連接點.其他如aspectJ還可以讓你在構(gòu)造器或?qū)傩宰⑷霑r都行,不過那不是咱關(guān)注的掏婶,只要記住啃奴,和方法有關(guān)的前前后后(拋出異常),都是連接點雄妥。
3.切入點(Pointcut)
上面說的連接點的基礎(chǔ)上纺腊,來定義切入點,你的一個類里茎芭,有15個方法揖膜,那就有幾十個連接點了對把,但是你并不想在所有方法附近都使用通知(使用叫織入梅桩,以后再說)壹粟,你只想讓其中的幾個,在調(diào)用這幾個方法之前宿百,之后或者拋出異常時干點什么趁仙,那么就用切點來定義這幾個方法,讓切點來篩選連接點垦页,選中那幾個你想要的方法雀费。
4.切面(Aspect)
切面是通知和切入點的結(jié)合。現(xiàn)在發(fā)現(xiàn)了吧痊焊,沒連接點什么事情盏袄,連接點就是為了讓你好理解切點,搞出來的薄啥,明白這個概念就行了辕羽。通知說明了干什么和什么時候干(什么時候通過方法名中的before,after,around等就能知道)垄惧,而切入點說明了在哪干(指定到底是哪個方法)刁愿,這就是一個完整的切面定義。
5.引入(introduction)
允許我們向現(xiàn)有的類添加新方法屬性到逊。這不就是把切面(也就是新方法屬性:通知定義的)用到目標(biāo)類中嗎
6.目標(biāo)(target)
引入中所提到的目標(biāo)類铣口,也就是要被通知的對象滤钱,也就是真正的業(yè)務(wù)邏輯,他可以在毫不知情的情況下脑题,被咱們織入切面菩暗。而自己專注于業(yè)務(wù)本身的邏輯。
7.代理(proxy)
怎么實現(xiàn)整套aop機制的旭蠕,都是通過代理
8.織入(weaving)
把切面應(yīng)用到目標(biāo)對象來創(chuàng)建新的代理對象的過程停团。有3種方式,spring采用的是運行時掏熬,為什么是運行時佑稠,后面解釋。
總結(jié):
切點定義了哪些連接點會得到通知
例:
@Configuration
@EnableAspectJAutoProxy
public class HttpAspect { //我是切面
// 我是切點
@Before("execution(public * com.springboot.controller.GirlController.*(..))")
public void log(){
System.out.println("我是通知");
}
}