2012-10-02 2 views
3

클래스가 커스텀 ClassLoader를 사용해로드되고있는 경우는, 결과적으로 "getClassLoader()"메소드를 호출하면 (자), 디폴트로 커스텀 ClassLoader가 돌려 주어집니다.디폴트의 클래스 로더의 아이덴티티는 Serializable입니다.

동일한 개체가 직렬화되고 네트워크를 통해 보낸 다음 deserialize하면 내 쿼리가 수행됩니다. Deserialised 클래스의 "getClassLoader()"에 대한 호출이 여전히 사용자 정의 ClassLoader를 반환합니까?

답변

2

동일한 개체가 직렬화되고 네트워크를 통해 보낸 다음 deserialize하면 내 쿼리가 수행됩니다. Deserialised 클래스의 "getClassLoader()"에 대한 호출이 여전히 사용자 정의 ClassLoader를 반환합니까?

클래스 로더가 직렬화되지 않았습니다. getClassLoader()는 ObjectInputStream이 사용하는 클래스 로더를 제공합니다. 현재의 thread의 스택에 방법이있는 경우 : ObjectInputStream.resolveClass

ObjectInputStream에있는이 메소드의 디폴트 구현에서


로더는 다음과 같이 결정된다

Class.forName(desc.getName(), false, loader) 

호출의 결과를 반환 선언 클래스가 사용자 정의 클래스 로더에 의해 정의되고 (반사 호출을 구현하기 위해 생성되지 않은) 로더는 현재 실행중인 프레임에 가장 가까운 메소드에 해당하는 클래스 로더입니다. 그렇지 않으면 로더가 null입니다.

+0

빠른 응답을 보내 주셔서 감사합니다. –

1

아니오. 당신은 클래스의 인스턴스를 실제 클래스 자체와 혼동하고 있습니다. 직렬화 된 객체를 직렬화하기 전에 클래스를로드해야합니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 그것이 사실일지도 모른다라고 생각했다. 그러나 그 것이 명백하게하는 것이 매우 도움이된다. –

관련 문제