锁定老帖子 主题:aop cache再讨论
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-07
写的不错,功力有所提升,继续支持
|
|
返回顶楼 | |
发表时间:2008-11-07
看了你之前的有关主页做缓存的说法,想知道一个动态主页如何做缓存呢?我的主页上基本上是一个以当前登录用户为条件收集相关信息的report review页面,比如当前用户待审核item数目,新消息数等,每个人登录以后都不一样,这个如何缓存?
|
|
返回顶楼 | |
发表时间:2008-11-08
我是一个初学者,可不可以多加一点注释呢?最好是一行一个注释!
|
|
返回顶楼 | |
发表时间:2008-11-08
俺只就annotation来提的建议:
@Cache(key="user_{1}_{2}",group="user") public User findUser(param1,param2); @Flush(group="user") public void updateUser(); |
|
返回顶楼 | |
发表时间:2008-11-09
针对mycybyb所讲的数据库被修改的情况缓存应该失效,这是因为具体逻辑只有自己的领域问题才知道,一个通用的缓存是解决不了的。通用的话,要么就在更改动作发生时缓存全体失效以保证正确性,因为通用缓存不知道它到底还关联了其它什么对象,要么就不用缓存。
只有对业务进行深入了解,然后自己手工操控缓存,拿spring注入一个ehcache实例,其它的什么时间存什么时间失效都要自己控制,这个拿着aop的话应该不是问题,问题是很多人都想要个省事的通用缓存。 |
|
返回顶楼 | |
发表时间:2008-11-10
不错不错,我们目前的aop cache正好可以修改修改~~~
|
|
返回顶楼 | |
发表时间:2008-11-10
最后修改:2008-11-12
发现代码有点小问题,
invocation.getThis().getClass().getMethod(methodName, classtypes)这个方法在调用的时候,如果遇到参数是某个接口的具体类型,而方法定义的时候定义的是接口,这样,getMethod就会抛找不到方法的异常. 所以代码换成这样了 Method[] mss = invocation.getThis().getClass().getMethods(); Method ms = null; for (Method m : mss) { if (m.getName().equals(methodName)) { boolean argMatch = true; Class[] tmpCs = m.getParameterTypes(); if (tmpCs.length != cs.length) { //argMatch = false; continue; } for (int k = 0; k < cs.length; k++) { if (!cs[k].equals(tmpCs[k])) { argMatch = false; break; } } if (argMatch) { ms = m; break; } } } if (ms != null && ms.isAnnotationPresent(MethodCache.class)) { MethodCache mc = ms.getAnnotation(MethodCache.class); return getResult(targetName, methodName, arguments, invocation, mc.expire()); } else { return invocation.proceed(); } |
|
返回顶楼 | |
发表时间:2008-11-11
可能是spring的cache aop 我没看懂,觉得嘿嘿的,我还是自己用aspectj 写 增强,感觉到踏实啊
|
|
返回顶楼 | |
发表时间:2008-11-11
不过用那么多annotations 我看着木木的,还是纯代码看着干净啊
|
|
返回顶楼 | |
发表时间:2008-11-12
好文章, spring确实强大
|
|
返回顶楼 | |