关于@Cached的annotation的问题,求解
@Cached可以用在page,Component和mixin中,用于对方法的返回值进行缓存,其中该注释的watch参数是用来提供一个观察点,如果watch指定的绑定表达式属性值改变了,那么就刷新@Cached的缓存。
如下面这个例子:
public class Start { @Persist private int watch; private UserDao userDao = new UserDao(); @Cached(watch = "prop:watch") public List<User> getUsers() { return userDao.getUsers(); } void onChange() { watch++; } public int getWatch() { return watch; } public void setWatch(int watch) { this.watch = watch; } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"> <t:grid source="users"></t:grid> <div> <t:eventlink event="change">change</t:eventlink> </div> </html>
首先我提供一个方法public List<User> getUsers(),用来获取一个User的列表,在这个方法上我增加了@Cached的注释,并且让该注释观察Start页面的watch属性(int的类型),然后页面中增加一个eventlink的链接,用于修改page的watch的值(该值增加了@Persist注释,所以放在session中)。
我的设想:无论我怎么刷新页面,session中的watch值都是不会变化的,所以使用public List<User> getUsers()方法的返回值返回的总是缓存值,只有点击change链接以后修改了session中的watch值才会变化public List<User> getUsers()的缓存结果。
但是,现在的结果是缓存根本没起作用,刷新页面和点击change链接都会变化grid的显示数据。
求解释,或者给个简单的小事例。谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
已经自我感觉理解了,详见http://my.oschina.net/namespace/blog/23534