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

阎王他爹 发布于 2011/06/02 10:10
阅读 331
收藏 0

@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的显示数据。

 

求解释,或者给个简单的小事例。谢谢。

加载中
0
阎王他爹
阎王他爹
已经自我感觉理解了,详见http://my.oschina.net/namespace/blog/23534
返回顶部
顶部