利用反射调用
/** * 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(); } }