~java
/**
* just print "say Hello" string to console
*
* @author rabierre
*/
public class HelloWorld {
    public void sayHello() {
        System.out.println("say Hello");
    }
    public static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld();
        helloWorld.sayHello();
    }
}
 
- jar파일로 패키징한다. (.java와 .class만 따로 패키징하는 방법은 여기)
 
    jar cvf helloworld.jar 
  
 
~java
/**
* call say HelloWorld class in external jar file package
*
* @author rabierre
*/
public class TestReflection {
    public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {
        ClassLoader classLoader = TestReflection .class.getClassLoader();
        System.out.println(classLoader.getClass().getName());
        URLClassLoader urlClassLoader = new URLClassLoader(
            new URL[]{
                new URL("file:/Users/fharenheit/Projects/openflamingo/helloworld.jar")
            }, classLoader
        );
        System.out.println(Thread.currentThread().getContextClassLoader().getClass().getName());
        Thread.currentThread().setContextClassLoader(urlClassLoader);
        System.out.println(Thread.currentThread().getContextClassLoader().getClass().getName());
        Class<?> helloWorld = ClassUtils.getClass("HelloWorld");
        Object object = helloWorld.newInstance();
        Method[] declaredMethods = helloWorld.getDeclaredMethods();
        for (int i = 0; i < declaredMethods.length; i++) {
            Method declaredMethod = declaredMethods[i];
            System.out.println(declaredMethod.getName());
        }
        Method sayHello = o.getClass().getMethod("sayHello", null);
        sayHello.invoke(object, null);
    }
}