javascript
SpringAOP的SchemaBase方式
文章目錄
- 1、SpringAOP的專業概念:
- 2、SpringAOP的SchemaBase方式基本流程
- SchemaBase方式環繞通知方式實現AOP
- SchemaBase方式的異常通知
- SpringAOP的SchemaBase方法的參數
1、SpringAOP的專業概念:
真實對象: 要進行功能擴展的對象,相當于A對象
代理對象: 完成功能擴展的對象,相當于B對象.
切點: 要進行功能擴展的方法,相當于testA()方法
前置通知方法: 在切點之前執行的擴展方法
后置通知方法: 在切點之后執行的擴展方法
切面: 由前置通知+切點+后置通知形成的橫向執行的面
織入: 由前置通知+切點+后置通知形成切面的過程
AOP的概念: 面向切面的編程(在不改變原有代碼的基礎上擴展功能)
SpringAOP的本質總結:
我們將要進行功能擴展相關的材料以及對應的組織規則告訴Spring容器,Spring容器幫我們動態創建一個代理對象。我們直接從Spring容器中獲取代理對象完成功能開發。
2、SpringAOP的SchemaBase方式基本流程
①導入SpringAOP的jar包
②在src下創建包advice,并創建前置通知類和后置通知類
前置通知類
創建一個普通的java類,實現MethodBeforeAdvice接口,
重寫before方法,在before方法中聲明擴展前的邏輯代碼。
后置通知類:
創建一個普通的Java類,實現AfterReturningAdvice接口,重寫after方法,并在after方法中聲明擴展后的邏輯代碼。
③在applicationcontext.xml文件中配置資源的bean對象以及聲明組裝規則。
資源對象:
要進行功能擴展的bean對象
前置通知的bean對象
后置通知的bean對象
聲明組裝規則:(使用AOP標簽完成)
聲明切點
聲明組裝
④從Spring容器中直接獲取代理對象完成功能開發
注意:如果讓Spring容器對象某個bean對象按照AOP進行功能擴展,則從Spring容器中使用該對象的ID獲取的對象已經不是其本身了,而是他的代理對象
SchemaBase方式環繞通知方式實現AOP
解釋:
前面我們已經使用前置通知方式和后置通知方式完成了AOP的擴展代碼的編寫。而我們之前學過過濾器的概念,在過濾器中會先執行一部分代碼,執行后如果放行了則繼續執行Servlet,Servlet執行后再次回到過濾器中執行。那么,從AOP的角度過濾器就相當于Servlet的擴展對象了。過濾器中的攔截方法,就相當于擴展方法,而我們將擴展代碼和調用原有切點方法的代碼全部直接聲明在一個方法中了,那么能不能采用此種方案來完成我們會自己的AOP擴展呢?
實現:
環繞通知
特點:
將擴展代碼和調用原有切點方法的代碼聲明在一起,簡化擴展流程。也就說環繞通知中包含了前置通知和后置通知。
使用:
①創建一個普通Java類,實現環繞通知的接口。
②在applicationcontext.xml文件中配置環繞通知的bean
③在組裝規則中使用配置環繞通知的組裝。
注意:前置通知和后置通知和環繞通知可以同時使用,執行順序和配置順序相關。
SchemaBase方式的異常通知
問題:
在我們封裝一個功能方法時,一般方法處理數據所造成的異常信息需要拋出,或者代碼編譯沒有問題,運行期間出現問題,該異常也應該有調用者來處理。那么在SpringAOP中,代理對象是動態生成的,在代理對象中會調用前置通知,后置通知,環繞通知,切點方法,那么如果這些方法出現異常信息,理論上來說應該在擴展對象中的擴展方法中完成異常的處理。但是尷尬的是,代理對象是動態生成的,不是由我們創建類然后根據類文件創建出來的,那么我們就無法直接的聲明異常處理代碼了,怎么辦呢?
解決:
在外部聲明異常處理的功能方法,讓SpringAOP動態生成的代理對象,在生成的catch中調用我們聲明的異常處理方法即可。
使用:
①創建一個普通Java類,實現異常接口。
②在applicationcontext.xml文件中配置異常通知bean對象
③在applicationcontext.xml文件中配置異常通知bean的組裝
SpringAOP的SchemaBase方法的參數
[1]前置通知
使用:
①聲明一個普通Java類,實現BeforeAdvice接口。
②在Spring配置文件中配置前置通知的bean對象
③配置組裝
方法:
方法名:before
調用者:代理對象中的擴展方法調用
方法體:聲明切點之前執行的擴展代碼
參數:
( Method method, Object[] objects, Object o )
參數的作用:
[2]后置通知
使用:
①聲明一個普通Java類,實現AfterReturningAdvice接口。
②在Spring配置文件中配置后置通知的bean對象
③配置組裝
方法:
方法名:after
調用者:代理對象中的擴展方法調用
方法體:聲明切點之后執行的擴展代碼
參數:
( Object o, Method method, Object[] objects, Object o1 )
參數的作用:
[3]環繞通知
使用:
①聲明一個普通Java類,實現MethodInterceptor接口。
②在Spring配置文件中配置環繞通知的bean對象
③配置組裝
方法:
方法名:invoke
調用者:代理對象中的擴展方法調用
方法體:聲明擴展代碼同時根據需求是否放行。
參數:
( MethodInvocation methodInvocation )
參數的作用:
[4]異常通知
使用:
①聲明一個普通Java類,實現ThrowAdvice接口。
②在Spring配置文件中配置異常通知的bean對象
③配置組裝
方法:
方法名:afterThrowing
調用者:代理對象中的擴展方法的catch中調用
方法體:根據異常信息處理異常。
參數:
( Exception ex )
參數的作用:
獲取異常信息
總結
以上是生活随笔為你收集整理的SpringAOP的SchemaBase方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021丰田雷凌1.2t豪华版功能配置?
- 下一篇: gradle idea java ssm