더북(TheBook)

이렇게 하면 유틸리티 메서드는 방금 설정한 컨텍스트 클래스 로더를 다음과 같이 얻어 올 수 있다.

public class Util {

    public Object createInstance(String className) {

        Thread t = Thread.currentThread();

        ClassLoader loader = t.getContextClassLoader();

        Class<?> cl = Class.forName(className, true, loader);

        ...

    }

    ...

}


애플리케이션은 플러그인 클래스의 메서드를 호출할 때 컨텍스트 클래스 로더를 플러그인 클래스 로더로 설정해야 한다. 그리고 플러그인 클래스의 메서드를 사용한 후에는 이전 설정으로 복원해야 한다.

Tip icon2

클래스를 이름으로 로드하는 메서드를 작성할 때는 단순히 메서드가 속한 클래스의 클래스 로더를 사용하면 안 된다. 메서드를 호출하는 쪽에서 명시적으로 클래스 로더를 전달하는 방법과 컨텍스트 클래스 로더를 사용하는 방법 중 하나를 선택할 수 있게 하는 것이 좋다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.