You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					128 lines
				
				5.3 KiB
			
		
		
			
		
	
	
					128 lines
				
				5.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								package com.ynxbd.common.helper.common;
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//import javassist.ClassPool;
							 | 
						||
| 
								 | 
							
								//import javassist.CtClass;
							 | 
						||
| 
								 | 
							
								//import javassist.CtMethod;
							 | 
						||
| 
								 | 
							
								//import javassist.Modifier;
							 | 
						||
| 
								 | 
							
								//import javassist.bytecode.CodeAttribute;
							 | 
						||
| 
								 | 
							
								//import javassist.bytecode.LocalVariableAttribute;
							 | 
						||
| 
								 | 
							
								//import javassist.bytecode.MethodInfo;
							 | 
						||
| 
								 | 
							
								//import weixin.popular.bean.user.User;
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//public class MethodUtil {
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    public String test() {
							 | 
						||
| 
								 | 
							
								//        return "hello";
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    public static void test2(String a, String b, User user) {
							 | 
						||
| 
								 | 
							
								//        System.out.println(a);
							 | 
						||
| 
								 | 
							
								//        System.out.println(b);
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    public static void test03(String name, Object... args) {
							 | 
						||
| 
								 | 
							
								//        System.out.println(name);
							 | 
						||
| 
								 | 
							
								//        for (Object o : args) {
							 | 
						||
| 
								 | 
							
								//            System.out.println(o);
							 | 
						||
| 
								 | 
							
								//        }
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    public static void main(String[] args) {
							 | 
						||
| 
								 | 
							
								////        ArrayList<Object> objects = new ArrayList<>();
							 | 
						||
| 
								 | 
							
								//////        objects.add("123");
							 | 
						||
| 
								 | 
							
								//////        objects.add(true);
							 | 
						||
| 
								 | 
							
								////        test03("123", objects);
							 | 
						||
| 
								 | 
							
								//        String[] names = getMethodParams("", "getData");
							 | 
						||
| 
								 | 
							
								//        System.out.println(names);
							 | 
						||
| 
								 | 
							
								//        if (names == null) return;
							 | 
						||
| 
								 | 
							
								////        System.out.println(names);
							 | 
						||
| 
								 | 
							
								//        for (String name : names) {
							 | 
						||
| 
								 | 
							
								//            System.out.println(name);
							 | 
						||
| 
								 | 
							
								//        }
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    /**
							 | 
						||
| 
								 | 
							
								//     * 根据类名和方法名,获取方法的参数名
							 | 
						||
| 
								 | 
							
								//     *
							 | 
						||
| 
								 | 
							
								//     * @param clazzName  类名
							 | 
						||
| 
								 | 
							
								//     * @param methodName 方法名
							 | 
						||
| 
								 | 
							
								//     * @return 参数名数组
							 | 
						||
| 
								 | 
							
								//     */
							 | 
						||
| 
								 | 
							
								//    public static String[] getMethodParams(String clazzName, String methodName) {
							 | 
						||
| 
								 | 
							
								//        try {
							 | 
						||
| 
								 | 
							
								//            ClassPool pool = ClassPool.getDefault();
							 | 
						||
| 
								 | 
							
								//            CtClass cc = pool.get(clazzName);
							 | 
						||
| 
								 | 
							
								//            CtMethod cm = cc.getDeclaredMethod(methodName);
							 | 
						||
| 
								 | 
							
								//            MethodInfo methodInfo = cm.getMethodInfo();
							 | 
						||
| 
								 | 
							
								//            CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
							 | 
						||
| 
								 | 
							
								//            String[] params = new String[cm.getParameterTypes().length];
							 | 
						||
| 
								 | 
							
								//            LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
							 | 
						||
| 
								 | 
							
								//            if (attr != null) {
							 | 
						||
| 
								 | 
							
								//                int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
							 | 
						||
| 
								 | 
							
								//                for (int i = 0; i < params.length; i++) {
							 | 
						||
| 
								 | 
							
								//                    params[i] = attr.variableName(i + pos);
							 | 
						||
| 
								 | 
							
								//                }
							 | 
						||
| 
								 | 
							
								//                return params;
							 | 
						||
| 
								 | 
							
								//            }
							 | 
						||
| 
								 | 
							
								//        } catch (Exception e) {
							 | 
						||
| 
								 | 
							
								//            e.printStackTrace();
							 | 
						||
| 
								 | 
							
								//        }
							 | 
						||
| 
								 | 
							
								//        return null;
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//初始化
							 | 
						||
| 
								 | 
							
								//    private void getVar() throws IntrospectionException, IllegalAccessException, InstantiationException, CannotCompileException {
							 | 
						||
| 
								 | 
							
								//        Class<? extends BaseServlet> clazz = this.getClass();
							 | 
						||
| 
								 | 
							
								//        ClassPool pool = ClassPool.getDefault();
							 | 
						||
| 
								 | 
							
								//        CtClass ctClass = pool.makeClass(StringUtils.capitalize(clazz.getName()));
							 | 
						||
| 
								 | 
							
								//        map = new HashMap<>();
							 | 
						||
| 
								 | 
							
								//        Field[] fields = clazz.getDeclaredFields();
							 | 
						||
| 
								 | 
							
								//        for (Field f : fields) {
							 | 
						||
| 
								 | 
							
								//            if (f.isAnnotationPresent(RequestParam.class)) {
							 | 
						||
| 
								 | 
							
								//                RequestParam requestParam = f.getAnnotation(RequestParam.class);
							 | 
						||
| 
								 | 
							
								//                // 注解值c
							 | 
						||
| 
								 | 
							
								//                Class<?> type = f.getType();
							 | 
						||
| 
								 | 
							
								////                System.out.println(f.getType());
							 | 
						||
| 
								 | 
							
								////                System.out.println(f.getGenericType());
							 | 
						||
| 
								 | 
							
								////                Object o = type.newInstance();
							 | 
						||
| 
								 | 
							
								////                Class<? extends Type> aClass = f.getGenericType().getClass();
							 | 
						||
| 
								 | 
							
								//                System.out.println("++++++++++++++++++++");
							 | 
						||
| 
								 | 
							
								//                String annotationVal = requestParam.value();
							 | 
						||
| 
								 | 
							
								//                System.out.println(annotationVal);
							 | 
						||
| 
								 | 
							
								//                // 属性名
							 | 
						||
| 
								 | 
							
								//                CtField make = CtField.make(String.format(fieldTemplate, f.getType().getName(), f.getName()), ctClass);
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//                String setMethodName = SETTER_STR + StringUtils.capitalize(f.getName());
							 | 
						||
| 
								 | 
							
								//                String getMethodName = GETTER_STR + StringUtils.capitalize(f.getName());
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//                CtMethod setter = CtNewMethod.setter(setMethodName, make);
							 | 
						||
| 
								 | 
							
								//                ctClass.addMethod(setter);
							 | 
						||
| 
								 | 
							
								//                CtMethod getter = CtNewMethod.getter(getMethodName, make);
							 | 
						||
| 
								 | 
							
								//                ctClass.addMethod(getter);
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//                System.out.println(setter.toString());
							 | 
						||
| 
								 | 
							
								//                System.out.println(getter.toString());
							 | 
						||
| 
								 | 
							
								//                System.out.println("===============");
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//                String fieldName = f.getName();
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								////                PropertyDescriptor descriptor = new PropertyDescriptor(fieldName, clazz);  //给一个属性,获取值
							 | 
						||
| 
								 | 
							
								////                Method getMethod = descriptor.getReadMethod();  //相当于为上面声明的字段设置get方法
							 | 
						||
| 
								 | 
							
								////                Method setMethod = descriptor.getWriteMethod();  //为上面声明的字段设置set方法(又称内省)
							 | 
						||
| 
								 | 
							
								////                getMethod.setAccessible(true);
							 | 
						||
| 
								 | 
							
								////                setMethod.setAccessible(true);
							 | 
						||
| 
								 | 
							
								////                System.out.println(setMethod.toString());
							 | 
						||
| 
								 | 
							
								////                System.out.println(getMethod.toString());
							 | 
						||
| 
								 | 
							
								//                if (annotationVal.equals("")) {
							 | 
						||
| 
								 | 
							
								//                    map.put(annotationVal, new BaseRequest(annotationVal, fieldName, setter, getter));
							 | 
						||
| 
								 | 
							
								//                } else {
							 | 
						||
| 
								 | 
							
								//                    map.put(fieldName, new BaseRequest(fieldName,  fieldName, setter, getter));
							 | 
						||
| 
								 | 
							
								//                }
							 | 
						||
| 
								 | 
							
								//            }
							 | 
						||
| 
								 | 
							
								//        }
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								//}
							 |