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;
}
}