关于@Cached的annotation的问题,求解

发布于 2021-11-08 22:30:00 字数 1525 浏览 887 评论 1

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜无邪 2021-11-09 23:46:11

已经自我感觉理解了,详见http://my.oschina.net/namespace/blog/23534

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文