反射调用方法实体类
测试类
package bean;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.junit.Test;
public class Reflect {
@Test
public void test1() {
SysUser sysUser = new SysUser();
try {
Class<?> clazz = Class.forName("bean.SysUser");
Method method = clazz.getMethod("eat1", String.class);
String invoke = (String) method.invoke(sysUser, "111");
System.out.println("invoke=" + invoke);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test2() {
SysUser sysUser = new SysUser();
try {
Class<?> clazz = Class.forName("bean.SysUser");
Method method = clazz.getDeclaredMethod("eat2", String.class);
method.setAccessible(true);
String invoke = (String) method.invoke(sysUser, "112");
System.out.println("invoke=" + invoke);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test3() {
SysUser sysUser = new SysUser();
try {
Class<?> clazz = Class.forName("bean.SysUser");
Constructor<?> constructor = clazz.getConstructor(String.class);
SysUser newInstance = (SysUser) constructor.newInstance("2222");
System.out.println(newInstance.name);
} catch (Exception e) {
e.printStackTrace();
}
}
}
实体类
package bean;
public class SysUser {
String name;
String password;
public String eat1(String str) {
return str;
}
private String eat2(String str) {
return str;
}
public SysUser(String name) {
this.name = name;
}
public SysUser(String name, String password) {
super();
this.name = name;
this.password = password;
}
public SysUser() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "SysUser [name=" + name + ", password=" + password + "]";
}
}
CommonServlet
package com.huaxin.webexam.web.common;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CommonServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
try {
/** 0.当前字节码文件 **/
Class<? extends CommonServlet> clazz = this.getClass();
/** 1.获取method参数 **/
String method = request.getParameter("method");
/** 2.获取method 反射出当前访问的方法 **/
Method method2 = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class);
/** 3.调用方法 **/
Object path = method2.invoke(this, request, response);
System.out.println("path " + path);
/** 4.跳转页面 **/
if (path != null) {
request.getRequestDispatcher("/WEB-INF/jsp/" + path.toString() + ".jsp").forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
doGet(request, response);
}
}