簡體   English   中英

編寫自定義Spring @Cacheable注釋

[英]Writing a custom Spring @Cacheable annotation

我目前正在編寫一個自定義的@Cacheable注釋,除了Spring的@Cacheable提供的那些之外,它還將采用額外的元數據屬性。 但是,Spring需要知道如何解析這個新的注釋。 我的理解是我需要擴展和覆蓋AnnotationCacheOperationSourcedetermineCacheOperations(),以便可以使用從其初始化的適當的CacheableOperation類來解析新的注釋。 這是正確的方法嗎?

問候,

史蒂夫

要看。

根據AnnotationCacheOperationSource javadoc

該類讀取Spring的Cacheable,CachePut和CacheEvict注釋,並將相應的緩存操作定義公開給Spring的緩存基礎結構。 此類還可以作為自定義CacheOperationSource的基類。

因此,如果您可以擴展該類以獲得CacheOperationSource的擴展行為,那么如果您要求是/否答案,則答案是肯定的。

但是,determineCacheOperations()方法的作用是它使用所有可用的CacheAnnotationParsers。 唯一的默認CacheAnnotationParser是SpringCacheAnnotationParser 如果你有一個自定義的,只需要另一個類為你的注釋實現CacheAnnotationParser。 然后Spring應該自動使用它。 您可以查看SpringCacheAnnotationParser 源代碼 ,了解它們是如何做到的。


編輯:好的,我錯了,因為這會自動發生。 我的下一個建議是

  • 實現接口CacheAnnotationParser,就像你顯然已經做過的那樣
  • 擴展AnnotationCacheOperationSource,以便在內部解析器集合中添加自己的CacheAnnotationParser以及Spring 1
  • 定義你的自定義AnnotationCacheOperationSource使用與Spring一樣的id,因此它將覆蓋Spring內部。 如果id匹配,它應該干凈地覆蓋Spring。 這將是這樣的:

    <bean id="annotationCacheOperationSource" class="com.company.YourCustomAnnotationCacheOperationSource" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM