Spring AOP 註解的方式實現快取的獲取

2021-08-10 17:41:26 字數 3073 閱讀 3913

在學習spring aop+註解的方式實現快取的獲取,你需要掌握幾個知識點

1、為什麼要用aop+註解的方式實現快取的獲取

2、你需要了解spring框架的搭建

3、你需要了解spring如何做到獲取方法引數的引數名

4、你需要了解反射的概念

5、你需要了解註解的基本知識

以上所列的2、4、5條都可以很快了解,但是對第3條,你需要好好學習下了,我就選擇1、3來說下我的理解,如果有錯誤,請諒解,畢竟我水平不高。

1、為什麼要用aop+註解的方式實現快取的獲取?

首先使用aop,我理解就是為了解耦合,如果我們在**實現中,業務邏輯**和快取的操作摻雜在一起,這樣會產生耦合,並且你會發現大量的快取操作**冗餘,

而且靈活性也不高(如果我換了乙個快取框架,那麼每個涉及到的快取**都需要修改)

使用註解是因為比較方便。

所以選擇使用aop+註解的方式實現快取的獲取

2、spring如何做到獲取方法引數的引數名

請參考我的部落格
為什麼要寫這篇文章?

最近在工作中,同事實現了這個功能,所以為了學習,我也選擇回家寫一次,看的再多,不如做一次。

**如下:

1、定義註解

/**

* 指定某個方法引數的名稱

*/@target(elementtype.parameter)

@retention(retentionpolicy.runtime)

@documented

public @inte***ce cacheparam

/**

* 標識在方法上面,用於動態操作快取

*/@target(elementtype.method)

@retention(retentionpolicy.runtime)

@documented

public @inte***ce cachemanage

2、定義基本的快取操作介面

/**

* 使用註解方式操作快取需要自己實現該介面的方法

* 因為快取元件有很多種,操作的api也不一樣

*/public inte***ce cacheoperate

3、實現工具類

/**

* 快取反射工具類

*/public class cacheutil

break;}}

}return paramname;

}public static string getparametername(method method, class type)

public static mapgetallparamters(method method, class type, object args)

if (paramname == null || "".equals(paramname))

parammap.put(paramname, args[index]);

break;}}

}return parammap;

}return ac.getbean(type);

}public static boolean isplaceholder(string value) ");

}public static string getcachekey(string key) ]", "");

}public static t checkandcastkeyvalue(string key, classtargettype, mapparamvalues, boolean isrequired)

object keyobj = paramvalues.get(keytemp);

if (keyobj == null) else

}if (!keyobj.getclass().isassignablefrom(targettype))

return targettype.cast(keyobj);

}}

4、定義切面

/**

* 使用註解的方式獲取快取

* 可以動態指定某個快取的key

* 可以動態指定是否要清空某個快取

*/@component

@aspect

public class cacheaspact

object result = null;

//如果需要清除快取,或者快取不存在

if (clearcacheflag||!cacheoperate.existcache(key,configfile)) else

return result;

}}

5、測試

@component

public class testcacheoperate implements cacheoperate

public object update(string key, object value, string configfile)

return map.put(key, value);

}public void del(string key, string configfile)

public boolean existcache(string key, string configfile)

@component("test")

public class testaspact ",clearcacheflag = "")

public string test(string value,@cacheparam("name") string name,@cacheparam("clearflag") boolean clearflag)

}

public class test 

}

結果如下:

第一次的值

第一次的值

第三次的值

第三次的值

springAOP 註解方式

package com.zf.aspect import org.aspectj.lang.joinpoint import org.aspectj.lang.proceedingjoinpoint import org.aspectj.lang.annotation.afterreturning ...

SpringAOP的註解方式

aop 註解 理解 應用 重點 1.aop註解配置流程 a.開啟aop配置支援註解 aspectj 核心配置檔案中新增以下配置,功能等同於註解配置bean的自動掃瞄路徑 b.將所有參與aop配置的類宣告為spring控制的bean 可以使用xml配置格式或註解格式 c.在切面類的類定義上方新增切面的...

SpringAOP的註解方式

aop 註解 理解 應用 重點 1.aop註解配置流程 a.開啟aop配置支援註解 aspectj 核心配置檔案中新增以下配置,功能等同於註解配置bean的自動掃瞄路徑 b.將所有參與aop配置的類宣告為spring控制的bean 可以使用xml配置格式或註解格式 c.在切面類的類定義上方新增切面的...