Virtual Method Invoke를 이용하면 무엇을 실행하게 될지 알수 없는 동적 바인딩인 메서드를 실행할수 있다.
이를 통해 웹서비스에서 많이 볼수 있는 플러그인이라던가, 위젯을 손쉽게 구현할 수 있다.
[code]import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class DynamicClassLoader {
public Object execute(Class clazz, String runner, Object… args)
throws ClassNotFoundException, SecurityException,
InstantiationException, IllegalAccessException {
Method[] methods = clazz.getMethods();
try {
for (Method method : methods) {
if (method.getName().equals(runner)) {
return method.invoke(this, args);
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
}[/code]
첫번째 인자로 읽어들일 클래스를 넣어주고, 두번째 인자로 수행할 메서드명을 입력한다.
그 이후에는 인자값들을 넣어주면 된다. 가변인자를 사용한다.
가변인자와 발전된 for문 형식때문에 위의 소스는 JDK 5이상에서만 작동한다.
invoke를 통해서 마치 자신이 해당 클래스에서 호출한 메서드인것처럼 작동하게 된다.