이해 하기 쉬 운 반사 메커니즘

2262 단어 class자바
학습 목적:가끔 은 JDK 의 방법 이 도움말 문서 에 제공 되 지 않 았 을 수도 있 지만 소스 코드 를 보면 이 방법 이 있 습 니 다.만약 에 이 방법 이 private 개인 이 라면 JDK 의 도움말 문 서 는 이 방법 을 제공 하지 않 았 습 니 다.만약 에 이 방법 을 사용 해 야 한다 면 우 리 는 반사 적 인 방식 으로 얻 을 수 있 습 니 다.사용 방식 1.this.getClass()이 Class 대상 을 되 돌려 줍 니 다//첫 번 째 방식:대상 을 사용 하 는 getClass()방법;2.Class.forName("클래스 의 전체 이름");/클래스 의 전체 경로 에 따라 불 러 오고 클래스 의 Class 대상 을 되 돌려 줍 니 다.3.클래스.class();/세 번 째 방식:클래스 의 속성 을 통 해 획득;class 방법**Class c=클래스.getClass();Method m=c.getMethod("문자열",인자.class);method 방법 String str=(String)m.invoke(Object o,매개 변수 이름);-이 방법의 반환 값 되 돌리 기;다음은 만능 servlet 예 를 참고 할 수 있 습 니 다.
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
//1.          
String method = request.getParameter("method");
//2.          (       method method  "    ")
if(method == null || method.trim().isEmpty()){
    throw new RuntimeException("      method  ");
}

//3.    Servlet          
Class c = this.getClass();
Method m = null;
try {
    //4.    Servlet                     Method  
    m = c.getMethod(method, HttpServletRequest.class,HttpServletResponse.class);

} catch (Exception e) {//            Servlet    
    throw new RuntimeException("    :"+method+"   ");
} 

//5.  Method             
try {
    String result = (String) m.invoke(this, request,response);

    if(!result.contains(":")){//                ,     ,     
        request.getRequestDispatcher("/"+result).forward(request, response);
    }else{
        int index = result.indexOf(":");
        String fs = result.substring(0, index);
        String path = result.substring(index+1);

        if(fs.equals("f")){//  
            request.getRequestDispatcher("/"+path).forward(request, response);
        }else if(fs.equals("s")){//   
            response.sendRedirect(request.getContextPath()+"/"+path);
        }else{
            response.getWriter().write("what you want to do");
        }
    }

} catch (Exception e) {//       
    throw new RuntimeException("    :"+method+"    ");
}

} }

좋은 웹페이지 즐겨찾기