[ClassLoader 퀴즈 5] Whiteship은 언제 로딩 될까?
public class SpringSprout {
Whiteship2 whiteship;
public void makeWhiteship(){
whiteship = new Whiteship2();
}
}
이런 클래스가 있을 때 SpringSprout가 참조하는 Whiteship2는 과연 언제 클래스로더에 의해 로딩이 될까요? SpringSprout를 로딩할 때? SpringSprout 객체를 생성할 때? Whiteship2 인스턴스를 생성할 때. 이 중 하나가 아닐까요?
@Test
public void whenDoseTheDependeciesWillBeLoaded() throws Exception {
FileUrlClassLoader fUCL1 = new FileUrlClassLoader(WIN_TEMP_CLASSPATH);
Class springSproutClass1 = fUCL1.loadClass(TEMP_SPRING_SPROUT);
Object springSprout1 = springSproutClass1.newInstance();
assertThat(fUCL1.isLoadedClass(TEMP_WHITESHIP), is(B1));
Object whiteship1 = springSproutClass1.getMethod("makeWhiteship").invoke(springSprout1, null);
assertThat(fUCL1.isLoadedClass(TEMP_WHITESHIP), is(B2));
System.out.println(fUCL1.loadClass(TEMP_WHITESHIP).getClassLoader());
System.out.println(fUCL1.loadClass(TEMP_SPRING_SPROUT).getClassLoader());
}
그래서 위와 같은 테스트를 만들어봤습니다.
이 테스트가 통과하려면 B1과 B2에는 각각 어떤 값이 들어가야 할까요?
기타 조건은 이전 글과 동일합니다.