一. 思路
1.通过反射找到对应的方法名;
2.通过参数个数确定要调用的方法;
3.通过参数类型转换输入参数的类型;
4.通过Method.invoke方式执行。
二.代码如下:
public Map<String, Object> invoke(String methodName, String param) { Map<String, Object> res = Maps.newHashMap(); methodName = methodName.trim(); param = param.trim(); if (StringUtils.isBlank(methodName)) { res.put("msg", "请输入方法"); return res; } Jedis jedis = null; try { jedis = pool.getResource(); String[] params = null; Method target = null; Object[] targetParams; if (StringUtils.isNotBlank(param)) { params = param.split(" "); targetParams = new Object[params.length]; } else { targetParams = new Object[]{}; } // 遍历找到同名方法 List<Method> methods = Lists.newArrayList(); for (Class<?> searchType = jedis.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { Method[] methodArray = searchType.getDeclaredMethods(); for (Method method : methodArray) { if (method.getName().equals(methodName)) { Reflections.makeAccessible(method); methods.add(method); } } } // 根据参数个数判断正确方法 for (Method method : methods) { logger.error(method.getName()); Class<?>[] parameterTypes = method.getParameterTypes(); if (ArrayUtils.isNotEmpty(parameterTypes) && ArrayUtils.isNotEmpty(params)) { logger.error(parameterTypes[0].getName()); if ("[B".equals(parameterTypes[0].getName())) { continue; } if (parameterTypes.length == params.length) { target = method; break; } } else if (ArrayUtils.isEmpty(params) && ArrayUtils.isEmpty(parameterTypes)) { target = method; break; } } // 根据Method参数转换输入参数数据类型 if (null != target && ArrayUtils.isNotEmpty(params)) { Class<?>[] parameterTypes = target.getParameterTypes(); for (int i = 0; i < params.length; i++) { if (parameterTypes[i].getName().contains("String")) { targetParams[i] = params[i]; } else if (parameterTypes[i].getName().contains("int")) { targetParams[i] = Integer.valueOf(params[i]); } else if (parameterTypes[i].getName().contains("double")) { targetParams[i] = Double.valueOf(params[i]); } else if (parameterTypes[i].getName().contains("float")) { targetParams[i] = Float.valueOf(params[i]); } } } Object result = target.invoke(jedis, targetParams); res.put("msg", jsonMapper.toJson(result)); } catch (Exception e) { logger.error("执行Redis异常", e); res.put("msg", e); } finally { if (jedis != null) { jedis.disconnect(); } } return res; }
相关推荐
Redis Windows32位+64位安装包,Linux压缩包, Redis图形操作管理软件,Jedis
jedis:Redis的Java客户端
Jedis操作Redis的案例,主要涉及MyBatis持久层框架、Jedis工具类、Servlet、JSP页面等技术
java操作redis代码示例 ,注释,Jedis的api操作注释详细。
java框架中使用jedis操控redis 1、单机版 2、集群版 工具类 常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类
分享一下Redis的JAVA客户端,Jedis工具包
jedis通过JedisSentinelPool获取jedis操作redis,通过配置sentienl,获取sentinel连接池,通过sentinel,获取jedis信息
redis博客总集-jedis连接redis的所有操作
有 jedis-2.7.3 和 jedis-2.1.0版本的的 用一种就行。包含common-pool2-2.3.jar,jedis-2.7.3.jar ,jedis-2.1.0.jar 和common-pool-1.6.jar(建议使用jedis-2.7.3.jar,旧版的一些方法都缺是,比如colse之类的)
redis3.0 java下客户端jedis
Jedis 操作Redis 集群demo,仅作参考
NULL 博文链接:https://fxzcollege6.iteye.com/blog/2211127
Java通过Jedis操作Redis,演示Redis基本数据类型,主从复制,事务。
本文阐述了jedis与redis相对应的各类方法,方便开发者根据需求调用
jedis调用redis源码Demo,直接导入工程就可以运行。 redis目录下有redis安装文件和入门电子书 redis64-2.8.9.zip redisbin_x32.zip Redis入门指南(JB51.NET).pdf Redis设计与实现.pdf src: FirestJedisTest.java ...
spring-data-redis-2.1.5.RELEASE和jedis2.9.0,用于java使用redis开发。
此资源为工程代码,需要安装redis缓存数据库才可以使用,使用jedis操作redis
jedis(java连接redis)
spring-data集成jedis测试代码,spring配置文件及jar包。
【Redis】使用 Jedis 操作 Redis 数据库 ② ( Jedis API 规律 | Redis 命令与 Jedis 函数名称基本一致 | Jedis API 使用示例 ) https://hanshuliang.blog.csdn.net/article/details/129128393 博客代码示例