利用反射调用

/**
     * getDeclaredConstructor(Class<?>... parameterTypes)
     * 这个方法会返回制定参数类型的所有构造器,包括public的和非public的,当然也包括private的。
     * getDeclaredConstructors()的返回结果就没有参数类型的过滤了。
     *
     * 再来看getConstructor(Class<?>... parameterTypes)
     * 这个方法返回的是上面那个方法返回结果的子集,只返回制定参数类型访问权限是public的构造器。
     * getConstructors()的返回结果同样也没有参数类型的过滤。
     *
     */
    public static void main(String[] args) {
        URL confUrl = WadeSafeConf.class.getResource("/");
        String confFile = (confUrl==null?"":confUrl) + "WadeSafe.conf";
        if(confFile.startsWith("file:")){
            confFile = confFile.substring(5);
        }
        WadeSafeConf wadeSafeConf = new WadeSafeConf(confFile);
        String beanCls = wadeSafeConf.getConfParam("conf", "cfg.bean.class","com.wade.safe.bean.impl.WadeSimpleBean");
        System.out.println(beanCls);
        Class c = null;
        try {
            c = Class.forName(beanCls);
            Method[] methods = c.getDeclaredMethods();
            for (int i=0;i<methods.length;i++){
                String methodName=methods[i].getName();
                System.out.println(methods[i].getReturnType().getName());
//                Class<?>[] parameterTypes = methods[i].getParameterTypes();
//                for(int j=0;j<parameterTypes.length;j++){
//                    String parameterName = parameterTypes[j].getName();
//                    System.out.println("方法"+methodName+"的参数类型是"+parameterName);
//                }
            }
//            Constructor con = c.getConstructor(); // 构造器调用
//            Object wadeSimpleBean = con.newInstance();
//            Method verifyLimitStaff = c.getMethod("verifyLimitStaff", WadeRequestWrapper.class, HttpServletResponse.class);
//            Object ob1  = verifyLimitStaff.invoke(wadeSimpleBean);
//            System.out.println(ob1);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
原文地址:https://www.cnblogs.com/Tonyzczc/p/10476550.html