2009-09-15 2 views
2

Java에서 sun.reflect.ReflectionFactor.newConstructorForSerialization()을 통해 인스턴스를 검색하여 실제로 선언 된 생성자를 호출하지 않고도 클래스의 인스턴스를 만들 수 있습니다."munged"라는 ReflectionFactor.newConstructorForSerialization()에서 생성자를 반환하는 이유는 무엇입니까?

내가 아는 한이 특수 생성자는 "munged"라고 불립니다. 이 용어의 출처는 무엇입니까? 나는 사전에서 그것을 찾을 수 없었다. 어떻게 든 생성자를 건너 뜀으로써, 일반 객체 생성주기를 날조/우회되어 있기 때문에, 그것은 다음과 같은 의미로 사용 믿을

+1

왜 "munged"라고 생각합니까? 나는 이것을 듣지 못했다. 당신은 손으로 연결 고리를 가지고 있니? –

+0

http://svn.xstream.codehaus.org/browse/xstream/trunk/xstream/src/java/com/thoughtworks/xstream/converters/reflection/Sun14ReflectionProvider.java?r=HEAD – Martin

답변

2

:

(컴퓨팅) 수정하거나 가짜 이메일 (또는 다른 인터넷) 주소이므로 은 자동으로 수확 할 수 없습니다. esp. 스팸 봇을 피하기 위해

(컴퓨팅) 파일을 변경; 이

두 정의는 프린스턴의 워드 넷에서 있습니다 혼미, 파괴, 취소 할 수없는 변경합니다. 위키 낱말 사전에서

0

:

To transform data in an undefined or unexplained manner.

[반드시] 슈퍼 클래스 생성자를 호출하지 원래 클래스의 일부가 아닌 않습니다 deserialisation의 생성자. JVM 스펙 관점에서 볼 때 이는 합법적 인 생성자 인 munged 버전 인 불법입니다.

0

또한 sun. * 패키지의 클래스는 다른 JDK 구현에서는 사용할 수 없으므로 직접 사용하면 안됩니다. 따라서이 "생성자"는 다른 JDK에서 정의되지 않을 수 있습니다.

+0

objenesis를 사용할 수 있습니다. http : //code.google.com/p/objenesis/ 생성자를 우회해야하는 상황이 있습니다. * 직렬화, 원격 및 지속성 - 객체를 코드 호출없이 특정 상태로 인스턴스화하고 복원해야합니다. * 프록시, AOP 라이브러리 및 모의 객체 - 클래스는 super() 생성자에 대해 걱정할 필요없이 서브 클래스화할 수 있습니다. * 컨테이너 프레임 워크 - 객체를 비표준 방식으로 동적으로 인스턴스화 할 수 있습니다. (위 웹 사이트에서 가져옴) – Martin