使用ehcache我注意到@Cacheable注释可以在类去除之上或在方法去除之上使用,例如;
可缓存类:
@Cacheable
class CacheableClass{
Long l;
Integer i;
String s;
}
可缓存方法:
class ...
@Cacheable
public List<ToBeCached> getCacheableClassList()
{
...
}
如果@Cacheable位于类的顶部,那么就不能给出chache的名称,但是如果在方法之上声明,则可以给出在配置xml中声明的缓存的名称。我想我错过了一些东西,因为使用@Cacheable来解决课堂问题对我来说似乎是不可能的。
答案 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不允许使用此位置。
根据我读过的文件注释放置:
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() {}
}
如果你没有收到错误,那么我必须更新自己。