본문 바로가기

Java SE/Reflection Example

Reflection Example

Reflection API를 이용하여 객체의 메소드를 확인하고 호출하는 예

package sample;

public class MyBean {
 
 private String name;
 private int id;
 private java.util.Date date;
 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public java.util.Date getDate() {
  return date;
 }

 public void setDate(java.util.Date date) {
  this.date = date;
 }
}




 

package sample;

import java.lang.reflect.Method;

public class Test {

 public static void main(String[] args) throws Exception {
 
  Class c = Class.forName("sample.MyBean");
  MyBean mb = (MyBean) c.newInstance();
  Method[] ma = c.getMethods();
 
  for(int i=0;i<ma.length;i++) {

   String mName = ma[i].getName();
   /* set 메소드만 찾아서 호출해 본다 */
   if(mName.indexOf("set")!=-1){
    System.out.println("메소드 이름:"+mName);
    /* 메소드 파라미터 타입을 구한다 */
    Class[] ca = ma[i].getParameterTypes();
    String type = ca[0].getName();
    if(type.equals("java.lang.String")){
     ma[i].invoke(mb, new String[]{"홍길동"});
    }else if(type.equals("int")){
     ma[i].invoke(mb, new Integer[]{100});
    }else if(type.equals("java.util.Date")){
     ma[i].invoke(mb, new java.util.Date[]{new java.util.Date()});
    }
   }
  }// end of for()
  /* set 메소드가 제대로 실행되었는지 get 메소드를 호출하여 확인해 본다 */
  System.out.println("이름:"+mb.getName());
  System.out.println("아이디:"+mb.getId());
  System.out.println("날짜:"+mb.getDate());
 }
}




package org.kdea.java.reflection;

import java.util.*;

public class Main {

public static void main(String[] args) {

java.lang.reflect.Method method = null;

Class clsObj = null;

try {

clsObj = Class.forName("org.kdea.java.reflection.EmpService");

EmpService es = (EmpService)clsObj.newInstance();

method = clsObj.getMethod("getEname", String.class, Integer.class);

Object rtObj = method.invoke(es, "홍길동", 100);

System.out.printf("리턴된 값=%s \n", (String)rtObj);

} catch (Exception e) {

e.printStackTrace();

}

}

}

package org.kdea.java.reflection;


import java.util.ArrayList;

import java.util.List;



public class EmpService {

public String getEname(String loc, Integer empno) {

return "SMITH";

}

public List<String> getAllNames() {

List<String> list = new ArrayList<String>();

list.add("SMITH");

list.add("ANDY");

list.add("JONES");

list.add("WARD");

return list;

}

}