독자적으로 URLClassLoader 인스턴스를 생성해 클래스 패스에 없는 디렉터리나 JAR 파일에서 클래스를 로드할 수도 있다. 흔히 플러그인을 로드할 때 이 방법을 사용한다.
URL[ ] urls = {
new URL("file:///path/to/directory/"),
new URL("file:///path/to/jarfile.jar")
};
String className = "com.mycompany.plugins.Entry";
try (URLClassLoader loader = new URLClassLoader(urls)) {
Class<?> cl = Class.forName(className, true, loader);
// 이제 cl의 인스턴스를 생성한다(4.5.4 객체 생성 참고).
...
}
Caution
Class.forName(className, true, loader) 호출에서 두 번째 매개변수는 대상 클래스를 로드한 후 정적 초기화가 일어남을 보장한다. 분명 여러분도 정적 초기화가 일어나게 하고 싶을 것이다.