[英]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.