四 Struts2 反射实现
package com.myreflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectDemo { public static void main(String[] args) throws Exception { //1.假设我们已经解析struts.xml拿到com.action.LoginAction字符串 String path = "com.action.LoginAction"; //2.用反射原理来构造此类对象 Class c = Class.forName(path); //获取所有属性 Field[] fs = c.getFields(); Field[] fs2 = c.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { System.out.println(fs[i].getName()); } for (int i = 0; i < fs2.length; i++) { System.out.println("===="+fs2[i].getName()); } //获取所有方法 Method[] ms = c.getDeclaredMethods(); for (int i = 0; i < ms.length; i++) { System.out.println("方法名="+ms[i].getName()); } //怎么执行方法 //第一步:构造类的对象,获取类型的构造方法 //c.getConstructor(new Class[]{String.class,Integer.class}); Constructor cons = c.getConstructor(new Class[]{}); //通过构造器构造实例 //cons.newInstance(new Object[]{"admin",123}); Object obj = cons.newInstance(new Object[]{}); //2.执行方法 获取类型中execute方法 Method exe = c.getDeclaredMethod("execute", new Class[]{}); Object result = exe.invoke(obj, new Object[]{}); System.out.println("test方法执行的返回结果是:"+result); } public ReflectDemo() { } public ReflectDemo(String name,int num) { } //写一个类,写一个方法完成两个数求幂值 x的n次方值 //用反射来调用此方法 }