反射 getDeclaredMethod和getMethod的区别以及用法《实例》

首先介绍案例应用场景

在当前类获取当前类的方法,当获取到相对应的方法时,获取对应的方法!用反射的方法调用执行!

如果方法的修饰符为protected 请用, getDeclaredMethod 方法,为 public 请用 getMethod 方法 !

package cn.day1901.servlet;

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 Bservlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
     * 客户端必须传method方法
     * 1,获取参数,用来识别处理方法
     * 2,判断是哪一个方法,是哪一个就调用哪一个
     * 得到方法名,是否可以通过反射来调用方法
     * 得到当前类的Class对象,然后调用安的方法进行查询,得到Method
     * 我们要得到当前类的方法,所以需要得到当前类的Class
     * getDeclaredMethod 可以获取任意方法 像,protected修饰的
     * getMethod 只可以获取 修饰符为 public 的方法
     */
    
    String methodName = request.getParameter("method");
    if(methodName == null || methodName.trim().isEmpty()) {
        throw new RuntimeException("您没有传递method参数,无法确定您想要调用的方法!");
    }
    Method me =null;
    try {
        me = this.getClass().getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);        
    } catch (Exception e) {
        
        throw new RuntimeException(e+"你要调用的方法:"+methodName+"不存在");
    }         
    Object req = null;
    Object resp = null;
    try {
        me.invoke(this, req,resp); //反射调用,this ,后面跟参数
    } catch (Exception e) {            
        throw new RuntimeException(e+"你调用方法内部"+methodName+"冒出的异常");
    }
}

public void addUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    System.out.println("addUser");
}


public void editUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    System.out.println("editUser");
}

public void deleteUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    System.out.println("deleteUser");
}

}

你可能感兴趣的:(反射)