This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.lang.reflect.Constructor; | |
import java.lang.reflect.Field; | |
import java.lang.reflect.InvocationTargetException; | |
import java.lang.reflect.Method; | |
import org.apache.commons.logging.Log; | |
import org.apache.commons.logging.LogFactory; | |
/** | |
* @author need4spd, need4spd@cplanet.co.kr, 2010. 2. 11. | |
* | |
*/ | |
public class ReflectTest { | |
private Log logger = LogFactory.getLog(ReflectTest.class); | |
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException { | |
//Class class의 객체를 얻는 3가지 방법 | |
Class clazz = Class.forName("ReflectClass"); | |
Class clazz2 = ReflectClass.class; | |
Class clazz3 = new ReflectClass().getClass(); | |
//Class class 객체로 부터 해당 클래스의 인스턴스를 얻는 세가지 방법 | |
Object object = clazz.newInstance(); | |
Class[] constructorParamClass = new Class[] {String.class}; | |
Object[] constructorParamObject = new Object[] {"Reflect Test!!!"}; | |
Constructor constructor = clazz.getConstructor(constructorParamClass); | |
Object object2 = constructor.newInstance(constructorParamObject); | |
//필드를 가져오는 방법 | |
Field field = clazz.getField("myField"); | |
Object fieldObject = field.get(object2); | |
//특정 메서드 가져와서 실행 | |
Method method1 = clazz.getMethod("methodA"); | |
method1.invoke(object); | |
//파라메터가 있는 특정 메서드 실행 | |
Class[] methodParamClass = new Class[] {String.class}; | |
Object[] methodParamObject = new Object[] {"1 parameter"}; | |
Method method2 = clazz.getMethod("methodB", methodParamClass); | |
//method2.invoke(null, methodParamObject); //static 일때. | |
method2.invoke(object, methodParamObject); | |
//리턴값이 있는 메서드 실행 | |
Method method3 = clazz.getMethod("methodC"); | |
Object returnObject = method3.invoke(object); | |
System.out.println("methodC return value : " + returnObject); | |
System.out.println(fieldObject); | |
//static | |
Method method4 = clazz.getMethod("methodD", new Class[] {String.class}); | |
method4.invoke(null, new Object[] {"4 parameter"}); | |
// Method[] methods = clazz.getDeclaredMethods(); | |
// Method m = methods[2]; | |
// m.invoke(object, new Object[] {String.class}); | |
} | |
} |