Virtual Method Invoke

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를 통해서 마치 자신이 해당 클래스에서 호출한 메서드인것처럼 작동하게 된다.