PS+港服九月會免遊戲公佈 《殺手2》等
阿新 • • 發佈:2021-09-02
-
aop思想:橫向重複,縱向抽取
spring能夠為容器中管理的物件生成動態代理物件
以前我們要使用動態代理,我們需要自己呼叫下面這個方法。
Proxy.newProxyInstance(xx,xx,xx)生成代理物件
spring aop能夠幫我們生成代理物件
-
spring實現aop的原理
- 動態代理(其侷限性,被代理物件必須要實現介面,才能產生代理物件,如果沒有介面將不能使用動態代理技術)
Proxy.newProxyInstance(classLoader.Interface[] arr,InvocationMandeler handler) - cglib代理(其優點,作為第三方代理技術,cglib可以對任何類生成代理,代理的原理是對目標物件進行繼承代理。但如果目標是被final修飾符修飾,那麼該類無法被cglib代理)
總結,有介面存在時,優先使用動態動態,無介面時用cglib代理。
spring aop中的名詞解釋
- Joinpoint(連線點):所謂連線點是指那些被攔截到的點,在spring中,這些點指的是方法,因為spring只支援方法型別的連線點
- Pointcut(切入點):所謂切入點是指我們要對哪些Joinpoint進行攔截的定義
- Advice(通知/增強):所謂通知是指攔截到Joinpoint之後要做的事情就是通知,通知分為前置通知,後置通知,異常通知,最終通知,環繞通知(切面要完成的功能)
- Introduction(引介):引介是一種特殊的通知在不修改程式碼的前提下,Introduction可以以執行期為類,動態地新增一些方法或Field
- Target(目標物件):代理的目標物件
- Weaving(織入):是指把增強應用到目標物件來建立新的代理物件的過程,spring採用動態代理來織入,而AspectJ採用編譯期織入和類裝載期織入
- Proxy(代理):一個類被AOP織入增強後,就產生一個結果代理類Aspect(切面),是切入點和通知(引介)的結合。
-## spring aop
1.導包(4(spring四個核心包beans,context,core,expression)+2(日誌包hamcreate-core-1.3,junit-4.1)+2[spring aop,spring aspects]+2[aop聯盟包com.springsource.org.aopalliance+織入包com.springsource.org.aspectj.weaver])
2.準備目標物件
{使用spring aop本質就是幫我們生成代理物件}
3.準備通知