中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

聊聊在AOP模式下的緩存方案

面向方法的數據集緩存

使用了autofac做(zuo)為ioc容器,使用Autofac.Extras.DynamicProxy2作為方(fang)法攔(lan)截器,緩(huan)存面向方(fang)法,直接在方(fang)法上添加CachingAttribute特(te)性即可。

緩存注冊流程

  1. 關于方法攔截器
  2. 緩存名稱設計
  3. 添加ioc
  4. 添加攔截器與接口的綁定
  5. 在對應的接口實現類里,為方法添加CachingAttribute
  6. 緩存get,remove的作用

關于方法攔截器

方(fang)法攔截器是AOP面向(xiang)方(fang)面編程(cheng)的(de)一個(ge)重要(yao)體現,將我(wo)們的(de)功(gong)能(neng)(neng)點設計(ji)出現,與現有系統解耦(ou),然后注(zhu)入到項目里(li),哪些地方(fang)需要(yao)這個(ge)功(gong)能(neng)(neng),就在哪個(ge)地方(fang)注(zhu)入它。

AOP是以IOC容器為基(ji)礎的(de)(de),所以你(ni)的(de)(de)攔(lan)截(jie)器組件(jian)也需(xu)要提前被注入(ru)到ioc容器里,并且,現在(zai)不(bu)論是java還是.net,都提倡統(tong)一管理對象(xiang),而(er)不(bu)是用new來生產(chan)對象(xiang),這一點也是面向接口編程的(de)(de)一種體現,而(er)你(ni)在(zai)業(ye)務層進行對象(xiang)傳遞時,永遠依賴(lai)的(de)(de)是抽象(xiang),而(er)不(bu)會依賴(lai)具體的(de)(de)實現!

緩存名稱設計

名稱由(you)key和value組成

  • key:項目名+對象名+緩存名稱(CachingAttribute.key)
  • value:緩存方法的參數名+參數值的組合
    例如下面的緩存方法代碼
[Caching(CachingMethod.Get, value = "time")]
 DateTime GetTime(int id);

當調用為GetTime(1)時(shi),產生的緩存(cun)key值如下:

key="DataSetCache_IUserInfoService_time"
value="id_1"
添加ioc
builder.RegisterType<CachingBehavior>();
			builder.RegisterType<DefaultUserInfoService>()
				   .As<IUserInfoService>()
				   .InstancePerLifetimeScope()
				   .InterceptedBy(typeof(CachingBehavior))
				   .EnableInterfaceInterceptors();

添加攔截器與接口的綁定

 // 下面兩句表示將CachingBehavior攔截器綁定到接口上
 .InterceptedBy(typeof(CachingBehavior))
 .EnableInterfaceInterceptors();

在方法上添加CachingAttribute特性

[Caching(CachingMethod.Get,value="time")]
DateTime GetTime();

我們(men)可以(yi)(yi)在接口(kou)的(de)方(fang)(fang)法上(shang)(shang)(shang)添加(jia)這(zhe)(zhe)個特性(xing)(xing),也可以(yi)(yi)在接口(kou)的(de)實現類的(de)方(fang)(fang)法上(shang)(shang)(shang)添加(jia)這(zhe)(zhe)個特性(xing)(xing),根據緩存(cun)的(de)影響程度(du)去添加(jia)。如果緩存(cun)對接口(kou)所有實現都啟作(zuo)用,就放在接口(kou)方(fang)(fang)法上(shang)(shang)(shang),反之放在類的(de)方(fang)(fang)法上(shang)(shang)(shang)。

緩存get,remove的作用

  1. get:一般作用在帶有返回值的方法上,緩存名稱為項目名+類名+value,當緩存存在時,直接返回,當不存在時,執行方法后,把返回值存入緩存,再返回。
  2. remove:刪除某個緩存,它直接把緩存名稱value作為remove的參數注入。
posted @ 2019-03-26 19:11  張占嶺  閱讀(2307)  評論(3)    收藏  舉報