设为首页 加入收藏

TOP

注解方式---spring的AOP拦截用户操作(二)
2014-11-24 12:02:18 来源: 作者: 【 】 浏览:104
Tags:注解 方式 ---spring AOP 拦截 用户 操作
.setMsg(msg.toString());
// 记录DAO数据库操作日志
SysLogDAO.insertSysLogDetail(sysLogDetail);
}
// 执行数据库操作
object = joinPoint.proceed();
// 数据库查询缓存
} else if (Pattern.matches("(query|load|get|select|read)[\\S]*",
methodName)) {
// DAO层缓存注解
MemCacheKey cacheKey = new MemCacheKey();
// 获取cache注解属性
Cache cache = null;
// 获取请求方法
Class< > cls = joinPoint.getTarget().getClass();
// 获取class中的所有方法
Method[] methods = cls.getMethods();
for (Method m : methods) {
// 获取执行方法前的注解信息。
if (m.getName().equals(methodName)) {
cache = m.getAnnotation(Cache.class);
break;
}
}
if (cache != null) {
// 获取memcacheKey,并进行 MD5 加密
cacheKey = memcacheKey(cache, args);
// 判断缓存服务器是否存在该可以值
if (memcache.exist(cacheKey.getMemcacheKey())) {
object = memcache.get(cacheKey.getMemcacheKey());
} else {
// 执行数据库操作
object = joinPoint.proceed();
// 将数据存放进缓存
if (cacheKey.getMemcacheKey() != null) {
memcache.put(cacheKey.getMemcacheKey(),
object == null "" : object, new Date(cacheKey
.getTime()));
}
}
} else {
// 执行数据库操作
object = joinPoint.proceed();
}
} else {
// 执行数据库操作
object = joinPoint.proceed();
}
return object;
}
/**
* 获取根据注解中的key获取memcache的含参数key值
*
* @param cache
* @param parameterObject
* @return
* @author fei.zhao 2011-10-10
*/
@SuppressWarnings("unchecked")
private static MemCacheKey memcacheKey(Cache cache, Object[] args) {
MemCacheKey tempKey = new MemCacheKey();
String key = "";
boolean flag = true;
StringBuilder keyBuilder = new StringBuilder(32);
// 获取注解中的key值
String cacheKey = cache.key();
Object[] cacheArgs = cacheKey.split("\\.");
// 设置请求参数在args[]中的序号
// key参数进行循环遍历
for (Object s : cacheArgs) {
// 判断是否是格式$,$...
if (s.toString().startsWith("$")) {
// 获取参数名称
String type = s.toString().substring(1);
// 获取参数值
Object temp = args[0];
// 获取参数类型,不同参数类型数据处理不一样
Class< extends Object> paramClazz = temp.getClass();
String classType = paramClazz.getName();
if (classType.equals("java.lang.String")) {
keyBuilder.append(temp);
} else if (classType.equals("java.util.HashMap")) {
keyBuilder.append(((HashMap) temp).get(type));
} else if (classType.startsWith("com.")) {
try {
Field f = paramClazz.getDeclaredField(type);// 实体中字段
f.setAccessible(true);// 允许访问私有字段
keyBuilder.append(f.get(temp));
} catch (SecurityException e) {
flag = false;
e.printStackTrace();
} catch (NoSuchFieldException e) {
flag = false;
e.printStackTrace();
} catch (IllegalArgumentException e) {
flag = false;
e.printStackTrace();
} catch (IllegalAccessException e) {
flag = false;
e.printStackTrace();
}
}
} else {
keyBuilder.append(s);
}
// 每个参数后面添加 “.”号分隔
keyBuilder.append(".");
}
if (args.length == 3) {
keyBuilder.append(args[1] + ".").append(args[2]);
}
i
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Spring AOP记录系统日志 下一篇freemaker的初步使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: