ABP原始碼分析十三:快取Cache實現
ABP中有兩種cache的實現方式:MemroyCache 和 RedisCache. 如下圖,兩者都繼承至ICache介面(準確說是CacheBase抽象類)。ABP核心模組封裝了MemroyCache 來實現ABP中的預設快取功能。 Abp.RedisCache這個模組封裝RedisCache來實現快取(通過StackExchange.Redis這個類庫訪問redis)。
ICache:快取的介面。以string型別的key快取object型別的value.ICache.Get方法有兩個引數:
•key:快取中一個條目的鍵(字串型別)。
•工廠:沒有找到指定key的快取條目時呼叫傳入的action來建立cache。工廠方法應該建立並返回實際的條目。如果給定的key在快取中找到了,那麼不會呼叫該action。
ICache介面也有像GetOrDefault,Set,Remove,Clear的方法。同時,這些方法也有非同步(async)版本。
ITypedCache/TypedCacheWrapper: 支援泛型key和value的快取介面與實現,其內部通過封裝ICache例項和CacheExtension定義的對ICache的擴充套件方法來是實現泛型版本的Icache.
另外通過CacheExtension中的方法可以方便的將ICache物件轉換為 ITypedCache物件。 ITypeCache是ICache的包裝器,提供型別安全、泛型的cache。為了將ICache轉為ITypedCache,我們可以使用AsTyped擴充套件方法.
CacheExtension: 定義了ICache的擴充套件方法. 最關鍵的是如下兩個支援泛型的方法:GetOrDefault和GetOrDefaultAsync。如下,內部呼叫ICache例項的相應方法並通過型別轉換。
AbpCacheNames:定義了四個cache的key常量,這幾個cache是供ABP框架使用的
ICacheConfigurator/CacheConfigurator:封裝了cache的name和對該cahce的初始化方法,通過初始化方法可以完成對cache的配置(比如過期時間)。
ICachingConfiguration
ICacheManager/CacheManagerBase: 該介面和實現用於生成,配置以及銷燬ICache例項。具體是通過ICachingConfiguration物件來初始化cache, 並通過ConcurrentDictionary<string, ICache>來存放和管理cache.
ICacheManager.GetCache方法返回一個ICache。第一次請求時會建立快取,並通過CachingConfiguration中的CacheConfigurator完成對該Cache的配置,以後都是返回相同的快取物件。因此,我們可以在不同的類(客戶端)中共享具有相同名字的相同快取。
AbpMemoryCache:通過CLR的MemoryCache來實現Icache.
AbpMemoryCacheManager:重寫了CacheManagerBase的CreateCacheImplementation方法,該方法用於建立真實的Icache物件。 具體到AbpMemoryCacheManager就是建立AbpMemoryCache。
AbpRedisCacheManager:重寫了CacheManagerBase的CreateCacheImplementation方法,該方法用於建立真實的Icache物件。 具體到AbpRedisCacheManager就是建立AbpRedisCache。
IAbpRedisConnectionProvider/AbpRedisConnectionProvider:從web.config中讀取Redis的connectionstring資訊,並通過connectionstring生成ConnectionMultiplexer物件。AbpRedisConnectionProvider是一個單例實現,並且將ConnectionMultiplexer物件儲存在其本地的Dictionary中,避免反覆建立。
AbpRedisCache:實現了從Redis資料庫讀取資料的功能。具體則是通過IAbpRedisConnectionProvider物件來訪問redis資料庫。
相關推薦
ABP原始碼分析十三:快取Cache實現
ABP中有兩種cache的實現方式:MemroyCache 和 RedisCache. 如下圖,兩者都繼承至ICache介面(準確說是CacheBase抽象類)。ABP核心模組封裝了MemroyCache 來實現ABP中的預設快取功能。 Abp.RedisCache這個模組封裝RedisCache來實現快取(
ABP原始碼分析六:依賴注入的實現
ABP的依賴注入的實現有一個本質兩個途徑:1.本質上是依賴於Castle這個老牌依賴注入的框架。2.一種實現途徑是通過實現IConventionalDependencyRegistrar的例項定義注入的約定(規則),然後通過IocManager來讀取這個規則完成依賴注入。3另一種實現途徑是直接IocManag
[Abp 原始碼分析]十三、多語言(本地化)處理
0.簡介 如果你所開發的需要走向世界的話,那麼肯定需要針對每一個使用者進行不同的本地化處理,有可能你的客戶在日本,需要使用日語作為顯示文字,也有可能你的客戶在美國,需要使用英語作為顯示文字。如果你還是一樣的寫死錯誤資訊,或者描述資訊,那麼就無法做到多語言適配。 Abp 框架本身提供了一套多語言機制來幫助我們實
Spring Security原始碼分析四:Spring Social實現微信社交登入
社交登入又稱作社會化登入(Social Login),是指網站的使用者可以使用騰訊QQ、人人網、開心網、新浪微博、搜狐微博、騰訊微博、淘寶、豆瓣、MSN、Google等社會化媒體賬號登入該網站。 前言 在上一章Spring-Security原始碼分析
Spring Security原始碼分析三:Spring Social實現QQ社交登入
社交登入又稱作社會化登入(Social Login),是指網站的使用者可以使用騰訊QQ、人人網、開心網、新浪微博、搜狐微博、騰訊微博、淘寶、豆瓣、MSN、Google等社會化媒體賬號登入該網站。 OAuth2.0的認證流程示意圖 請求第三方應用
ABP原始碼分析三:ABP Module
Abp是一種基於模組化設計的思想構建的。開發人員可以將自定義的功能以模組(module)的形式整合到ABP中。具體的功能都可以設計成一個單獨的Module。Abp底層框架提供便捷的方法整合每個Module.下圖是所有Abp自帶的module.AbpModule是所有Module的基類,其已經擁有了IIocMa
ABP原始碼分析一:整體專案結構及目錄
ABP是一套非常優秀的web應用程式架構,適合用來搭建集中式架構的web應用程式。 整個Abp的Infrastructure是以Abp這個package為核心模組(core)+15個模組(module).其中13個依賴於Abp這個核心包。另外兩個包(FluentMigration,Web.Resources
ABP原始碼分析五:ABP初始化全過程
ABP在初始化階段做了哪些操作,前面的四篇文章大致描述了一下。 為個更清楚的描述其脈絡,做了張流程圖以輔助說明。其中每一步都涉及很多細節,難以在一張圖中全部表現出來。每一步的細節(會涉及到較多介面,類,呼叫關係,步驟流程什麼的)會在後面的文章中通過其他圖和文字詳細描述。其實如果仔細分析Abp原始碼的話,會發現
ABP原始碼分析八:Logger整合
ABP使用Castle日誌記錄工具,並且可以使用不同的日誌類庫,比如:Log4Net, NLog, Serilog... 等等。對於所有的日誌類庫,Castle提供了一個通用的介面來實現,我們可以很方便的處理各種特殊的日誌庫,而且當業務需要的時候,很容易替換日誌元件。 Logger功能模組涉及到的介面和類不
ABP原始碼分析四:Configuration
核心模組的配置 Configuration是ABP中設計比較巧妙的地方。其通過AbpStartupConfiguration,Castle的依賴注入,Dictionary物件和擴充套件方法很巧妙的實現了配置中心化。配置中心化是一個支援模組開發的框架必備功能。 ABP中核心功能模組中的一些功能的執行時的
ABP原始碼分析二:ABP中配置的註冊和初始化
一般來說,ASP.NET Web應用程式的第一個執行的方法是Global.asax下定義的Start方法。執行這個方法前HttpApplication 例項必須存在,也就是說其建構函式的執行必然是完成了。 ABP開始的地方就是HttpApplication的建構函式。 如下圖一,Abp定義了一個繼承自Http
ABP原始碼分析七:Setting 以及 Mail
本文主要說明Setting的實現以及Mail這個功能模組如何使用Setting. 首先區分一下ABP中的Setting和Configuration。 Setting一般用於需要通過外部配置檔案(或資料庫)設定的簡單型別資料(一般就是字串),比如SMTP HOST. Configuration一般
ABP原始碼分析十:Unit Of Work
ABP以AOP的方式實現UnitOfWork功能。通過UnitOfWorkRegistrar將UnitOfWorkInterceptor在某個類被註冊到IOCContainner的時候,一併新增到該類在容器中對應的ComponentModel的Interceptors集合中。總結一句話就是,UOW的功能是通過
ABP原始碼分析九:後臺工作任務
文主要說明ABP中後臺工作者模組(BackgroundWorker)的實現方式,和後臺工作模組(BackgroundJob)。ABP通過BackgroundWorkerManager來管理BackgroundJobManager,然後通過BackgroundJobManager來管理BackgroundJob
Tomcat原始碼分析之:ServletOutputStream的實現
貌似很久都沒有寫部落格了,tomcat8的程式碼已經看了很多,主體部分的程式碼也都看得差不多了,發現在tomcat8中已經完全支援非阻塞的方式接收以及傳送資料了。。。。但是比較遺憾的是,以前遺留下來的太多的老程式碼都不支援這種新的方式來發送資料。。。木有辦法。。。 這裡來看
Flask原始碼分析二:路由內部實現原理
前言 Flask是目前為止我最喜歡的一個Python Web框架了,為了更好的掌握其內部實現機制,這兩天準備學習下Flask的原始碼,將由淺入深跟大家分享下,其中Flask版本為1.1.1。 上次瞭解了Flask服務的啟動流程,今天我們來看下路由的內部實現機理。 Flask系列文章: Flask開發初探 F
ABP原始碼分析四十三:ZERO的本地化
ABP Zero模組擴充套件了ABP基礎框架中的本地化功能,實現了通過資料庫管理本地化的功能。其通過資料庫儲存本地化語言及其資源。 ApplicationLanguage:代表本地化語言的實體類。一種語言就是一個ApplicationLanguage例項。 ApplicationLanguag
ABP原始碼分析三十三:ABP.Web
ABP.Web模組並不複雜,主要完成ABP系統的初始化和一些基礎功能的實現。 AbpWebApplication : 繼承自ASP.Net的HttpApplication類,主要完成下面三件事一,在Application_Start完成AbpBootstrapper的初始化。整個ABP系統的初始化就是通過A
ABP原始碼分析十七:DTO 自動校驗的實現
對傳給Application service物件中的方法的DTO引數,ABP都會在方法真正執行前自動完成validation(根據標註到DTO物件中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。 Ivalidate: 空介面,用
ABP原始碼分析二十三:Authorization
Permission:用於定義一個Permission,一個permission可以包含多個子Permission. PermissionDictionary:繼承自Dictionary<string, Permission>類,很明顯是一個用於儲存permission物件的字典。 I