@cacheable方法和ehcache上的@Cacheable类有什么区别

时间:2014-07-10 06:53:33

标签: java spring hibernate ehcache

使用ehcache我注意到@Cacheable注释可以在类去除之上或在方法去除之上使用,例如;

可缓存类:

@Cacheable
class CacheableClass{
    Long l;
    Integer i;
    String s;


}

可缓存方法:

    class ...
            @Cacheable
            public List<ToBeCached> getCacheableClassList()
            {
                    ...
            }

如果@Cacheable位于类的顶部,那么就不能给出chache的名称,但是如果在方法之上声明,则可以给出在配置xml中声明的缓存的名称。我想我错过了一些东西,因为使用@Cacheable来解决课堂问题对我来说似乎是不可能的。

2 个答案:

答案 0 :(得分:-1)

在方法级别使用@Cacheable意味着缓存方法的结果。 在接口级别使用@Cacheable用于定义自定义注释,如下所示

//自定义注释

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Cacheable(value="books", key="#isbn")
public @interface SlowService {
}

以下代码

@Cacheable(value="books", key="#isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

可以替换为

@SlowService
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

但我从未见过在Class级别应用@Cacheable注释。

答案 1 :(得分:-1)

使用 ehcache-spring-annotations:

@ com.googlecode.ehcache.annotations。可缓存(cacheName =“test”)如果我们在类型级别提供此功能,则会出错注释@Cacheable不允许使用此位置

根据我读过的文件注释放置:

  1. 关于方法。
  2. 在界面上或
  3. 关于类的公共方法
  4. Spring建议您只使用@Cacheable注释来注释具体类的方法,而不是注释接口的方法。

    使用代理时,应将@Cacheable注释仅应用于具有公共可见性的方法。如果使用@Cacheable注释注释protected,private或package-visible方法,则不会引发错误,但带注释的方法不会显示已配置的cachable设置。

    使用Spring Cache

    如果使用 @ org.springframework.cache.annotation.Cacheable(value =“test”),其中value表示缓存的名称。您可以在类型&amp; /或方法级别指定此内容。

    你可以试试这个&amp;告诉您是否收到错误: -

    @com.googlecode.ehcache.annotations.Cacheable(cacheName = "test")
    @org.springframework.cache.annotation.Cacheable(value="")
    public class PortalDatabaseAdapterImpl{
    
        @com.googlecode.ehcache.annotations.Cacheable(cacheName="test")
        @org.springframework.cache.annotation.Cacheable(value="test")
        public List<PageControl> getLoginPage() {}
    }
    

    如果你没有收到错误,那么我必须更新自己。