public static void reflect(){ // 获取解析器 SAXReader reader = new SAXReader(); try { // 获取document Document document = reader.read("src/main/resources/WebDtd.xml"); // 获取根元素 Element root = document.getRootElement(); // 查找servlet元素 Element em = root.element("servlet"); // 查找servlet元素下的servlet-class元素 String servletClass = em.elementText("servlet-class"); // 返回与给定字符串名称的类或接口相关联的类对象 Class clz = Class.forName(servletClass); // 创建类的实例 Object obj = clz.newInstance(); // 获取指定类的方法 注意:getMethod()中的参数必须指明,否则如果存在重载情况会报错,其次,参数类型int和Integer是不一样的 Method f1 = clz.getMethod("f1",String.class, int.class,int.class); Method f2 = clz.getMethod("f2"); Method f3 = clz.getMethod("f3"); // 执行指定类的方法 Object f1Result = f1.invoke(obj,"lemon",1,10); Object f2Result = f2.invoke(obj); Object f3Result = f3.invoke(obj); System.out.println("f1Result:" + f1Result); System.out.println("f2Result:" + f2Result); System.out.println("f3Result:" + f3Result); } catch (Exception e) { e.printStackTrace(); } }
WebDtd.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>MyServer</servlet-name> <servlet-class>com.home.framework.test.PersonSImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServer</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
PersonS接口
public interface PersonS { String f1(String param1,int page,int limit); String f2(); String f3(); }
PersonS接口实现类
public class PersonSImpl implements PersonS { @Override public String f1(String param1,int page,int limit) { System.out.println("f1方法执行了-->[param1:" + param1 + ",page:" + page + ",limit:" + limit + "]"); return "出生"; } @Override public String f2() { System.out.println("f2方法执行了"); return "青年"; } @Override public String f3() { System.out.println("f3方法执行了"); return "爱你到老"; } }
转自: https://www.cnblogs.com/wangrongchen/p/9251503.html