[英]Why can't we use @Cacheable with static method in spring with ehcache?
我是Spring的新手並且讀到我們不能將@Cacheable
用於static method
但是無法找到為什么我們不能使用,所以任何人都可以解釋,以便初學者可以輕松理解? 我們可以使用靜態方法來檢索database table
嗎? 我已經制作了DAO service layer
的所有方法的static method
,所以這是thread-safe
嗎?
闡述我的評論:
“靜態方法無法緩存。方面在Spring中的工作方式是通過向帶注釋的類添加包裝類(代理)。在Java中無法向靜態方法添加包裝器。”
因為Spring需要一個對象來包圍,以便在將修改后的輸入委托給原始對象之前攔截對該對象的調用並執行各種操作(因此彈簧方面是可能的)。
因為任何static
東西都不能被實例化為一個對象,所以Spring無法繞過它並攔截它的調用(至少在Spring的當前實現中)
它是用於提供緩存的機制的限制。
當你將某個方法標記為@Cacheable
,Spring會為你的bean創建一個代理,它攔截方法調用並提供緩存,並將注入而不是原始bean。 所以如果你有一些像這樣的代碼:
@Inject
private MyBean myBean;
...
myBean.myMethod("foo");
在MyBean
將myMethod()
聲明為@Cacheable
, myBean
將不會指向您放在應用程序上下文中的內容,而是指向將執行緩存並僅在緩存查找未返回時調用原始MyBean.myMethod()
的代理任何東西。
Proxys無法攔截靜態方法,因此代理無法緩存靜態方法。 這就是@Cacheable
不能用於靜態方法的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.