浏览 623 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-03-16
为了缓存查询结果,使用Spring AOP(cglib)在业务层放置缓存拦截器,这样遇到的一个问题就是:如果一个业务方法同时包含读和写的操作(例如显示帖子列表的业务方法,既要查询又要递增阅读数),如果该方法被缓存,那么当缓存命中时,写操作也会被略过,这是不符合业务逻辑的。后来想到把这个业务方法的读和写分成两个内部方法,仅对实现读操作的那个内部方法启用缓存,但是又遇到问题了,实现读操作的内部方法根本没有被拦截,经过测试发现,业务类里的this仍然指向业务类自身,而不是cglib处理过后的业务类的子类,所以在业务方法里调用此业务类的其它方法时,那些其它方法是不会被拦截到的。不知道各位有什么好办法解决这个问题?
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
| 返回顶楼 | |
|
时间:2008-04-03
Taishen 写道 如果一个业务方法同时包含读和写的操作(例如显示帖子列表的业务方法,既要查询又要递增阅读数),
应该在dao层做AOP cache,对每个CRUD操作做相应的cache CRUD操作 |
|
| 返回顶楼 | |
|
时间:2008-04-04
Spring AOP实现机制导致的
|
|
| 返回顶楼 | |
|
时间:2008-04-04
使用AspectJ
|
|
| 返回顶楼 | |
|
时间:2008-05-04
谢谢,已经用AspectJ解决掉了。
不过我觉得缓存放在dao层不太合适,要缓存的通常都是业务层的查询,而很多情况下,对于dao层应该失效的缓存,对业务层其实是可以继续使用的,所以为了减少缓存的flush,提高缓存命中率,我把缓存放在了业务层。 |
|
| 返回顶楼 | |






