最近有一個任務是往現有系統中添加記錄操作日志的功能,原本打算是在ORM框架中對增刪改的委托里添加新的事件來記錄,但是這樣做的后果是改變了原有操作邏輯并且增加了系統回應請求的等待時間,后來打算采用Spring.Net AOP的框架來對現有操作方法進行攔截,這樣的話就可以在不改變原有邏輯的前提下,記錄操作日志,并且依靠Spring.Net AOP現成的DI方式,靈活添加攔截面,話不多說,下面是我個人的研究心得,在此記錄一下,
關于Spring.Net AOP的基礎概念,大家就自行百度下,我這里不多詳述,這里給個鏈接,我覺得這位大神冬子哥講的很好理解,https://www.cnblogs.com/GoodHelper/archive/2009/11/12/SpringNet_Aop.html
鄭重宣告:感興趣的同學可以先看劉東的博客,我也是在此基礎上學習之后有了自己的理解才寫這篇隨筆的,目的是加深理解和討論交流,此隨筆里一些代碼也是看著這位大神博客CV大法過來的,哈哈!
AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實作程式功能的統一維護的一種技術,對于Spring.net AOP來講,
這點我自己的理解就是我們可以使用Spring來攔截處理業務邏輯的方法物件,有點像MVC的攔截器,

這里有兩種方式來實作AOP:
一種是自動代理模式,采用DI的方式注入服務,優點是使用比較方便,改動組態檔就行,缺點是寫配置有些懵,但是搞懂了也沒啥
另一種是官檔或者Spring+開發手冊上的ProxyFactory方法,即代理模式,
先說第一種方法,自動代理模式,
想實作IOC,我們需要一個容器來裝載注入的服務,Spring.Net提供了一種在標準.net應用組態檔里添加自定義的Configuration Section方式來獲取一個背景關系,首先要在組態檔里添加如下配置:

如上,把必須的節點配置加上去之后,現在往objects節點里添加具體內容,

這里注入了一個自動代理,并往自動代理物件里添加了Advisor,同時注入了這個Advisor,這里有兩個pointcut,具體就是篩選攔截類名中含有'Service'的類的所有方法,

以上完成了結構圖里說的配置步驟,
接下來就是在代碼中獲取這個容器

ContextRegistry.GetContext()方法獲取context物件之前,Spring已經按照配置創建并注冊好了context物件,創建Context實體是由ContextHandler物件里的Create()方法,在創建程序中又呼叫了ContextRegistry類里的 RegisterContext()方法,


第二種方法呢,是通過代碼實作的,額···宣告對代理工廠,然后往工廠里添加各種Advisor,然后獲取代理,執行!這個較不推薦使用哈,太不方便了!

到這里,初體驗Spring.NET AOP也告一段落了,研究到這里,我已可以運用到我的作業中了,之后等看看完Spring Air之后再總結如何運用到Web專案里,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/285472.html
標籤:Windows
