설명서를 읽었지만 인수로 제공해야하는 클래스 로더를 이해하지 못합니다. 몇 가지 옵션을 시도했지만이 컴파일 또는 프록시 동작에 영향을 미치지 않는 것 같습니다. null
을 포함하여 클래스 로더 인수로 아무 것도 전달할 수 없으며 코드가 제대로 작동합니다. 아무도 이것을 설명 할 수 클래스 로더에 대한 나쁜 인수를 제공하면 어떤 종류의 오류가 발생할 수 있습니다 말해 줄래? Java 또는 일반적으로 클래스 로더가 무엇인지에 대해 직관적 인 아이디어를 갖고 있지는 않다고 덧붙여 야합니다.Proxy.newProxyInstance (...)에 어떤 ClassLoader를 제공해야합니까?
9
A
답변
6
모든 클래스에는 클래스 로더가 있어야하므로 여기에 하나씩 부여해야합니다.
인터페이스 유형의 모든 지정된 클래스 로더를 통해 이름으로 볼 수 있어야합니다 :
중요한 부분이 (the documentation for
getProxyClass()
에)입니다. 즉, 클래스 로더 (CL) 모든 인터페이스 난에 대한 는 다음과 같은 표현이 충족되어야합니다 그래서Class.forName(i.getName(), false, cl) == i
, 당신은 부모 클래스 로더의 하나 (또는 그 이상)가 주어진 정의 된 클래스 로더를 사용할 수 있습니다 인터페이스.
귀하의 케이스에서 null
이 작동하는 경우 인터페이스에 null
클래스 로더 (부트 스트랩 로더)가 있다고 가정합니다. 그러면 어떤 클래스 로더를 사용했는지는 중요하지 않습니다. 알지 못하는 인터페이스로 프록시를 생성해야한다면 주어진 인터페이스의 클래스 로더를 가져 와서 호출자가 이상한 일을하지 않았 으면 좋겠다.
왜 필요한가요?
이처럼 상상할 수 : 모든 인터페이스의 모든 메소드를 구현하는 새로운 클래스에 대한 몇 가지 바이트 코드 (아직 존재하지 않는 경우)
가getProxyClass()
방법은 생성 (이들 각각은 단순히 전달InvocationHandler
으로 전화).- 그런 다음이 바이트 코드를 지정한 클래스 로더의
defineClass
메소드로 전달합니다. - 이 바이트 코드에서 모든 인터페이스는 이름으로 참조되며, 이제 VM은 인용 된
forName
호출을 사용하여 이러한 인터페이스를 해결합니다.
getProxyClass
이 방법을 구현 한 수 있지만, 우리는 (부모로 지정된 하나) 새로운 클래스 로더를 만들어야합니다
하나. VM이
관련 문제
- 1. 웹 앱은 어떤 비디오 형식을 제공해야합니까?
- 2. Go docs를 내보내려면 어떤 트릭을 정적으로 제공해야합니까?
- 3. 어떤 옵션을 사용하여 UITableView 정렬 기능을 제공해야합니까?
- 4. 메인 클래스가없는 애플릿이있는 jar 파일의 manifest.mf에 어떤 기본 클래스를 제공해야합니까?
- 5. ClassLoader를 사용하여 다른 프로젝트에 프로젝트를 포함하는 방법
- 6. ClassLoader를 사용하여 다른 프로젝트의 클래스를로드하는 방법
- 7. ISelection - 탐색기에서 선택한 클래스의 ClassLoader를 얻는 방법
- 8. 리포지토리가 모든 데이터를 서비스에 제공해야합니까?
- 9. 내보기에 명시적인 뒤로 버튼을 제공해야합니까?
- 10. 클라이언트 jar에 종속 라이브러리를 제공해야합니까?
- 11. (플래시) Flowplayer source - http : //에서 제공해야합니까?
- 12. GlassFish는 EAR간에 공통 ClassLoader를 공유하도록 지원하지 않습니다. 해결 방법이 있습니까?
- 13. NaN을 반환하려면 java.lang.Long.parseLong()에 어떤 문자열을 전달해야합니까?
- 14. printf()에 대한 호출은 어떤 값을 생성합니까?
- 15. foo에서 select *에 어떤 영향이 있습니까?
- 16. Java ClassLoader를 사용하여 클래스 경로에서 파일을로드하는 방법은 무엇입니까?
- 17. 관련 기능 세트에 대한 도움을 어떻게 제공해야합니까?
- 18. Apache는 무엇을 제공해야하며 Tomcat은 무엇을 제공해야합니까?
- 19. 최고의 위치를 얻기위한 거리 필터를 제공해야합니까?
- 20. 클라이언트에게 'db_owner'역할이있는 SQL Server 로그인을 제공해야합니까?
- 21. Google Maps API에 Passenger로 실행되는 로컬 Rails 앱용으로 생성 된 키를 인식하도록하기 위해 어떤 URL을 제공해야합니까?
- 22. boost :: asio :: ip :: tcp :: resolver :: resolve()가 실패 할 때 어떤 boost :: system :: error_code 값을 제공해야합니까?
- 23. 내 C++ 클래스의 어떤 상황에서 할당 연산자, 복사 생성자 및 소멸자를 제공해야합니까?
- 24. 새 아카이브 형식을 지원하기 위해 사용자 정의 ClassLoader를 만들어야합니까?
- 25. WAR 파일에 대한 사용자 정의 ClassLoader를 강제 설정 하시겠습니까?
- 26. 클래스를로드하기 위해 부모를 검색하지 않는 ClassLoader를 어떻게 만듭니 까?
- 27. 연락처를 휴대 전화에 저장하려면 HTML 페이지에 클릭 가능한 링크를 제공해야합니까?
- 28. 언제 SQL 테이블에 자체 숫자 기본 키를 제공해야합니까?
- 29. gwt 국제화를 사용하는 동안 기본 locale.properties 또는 @DefaultStringValue를 제공해야합니까?
- 30. ASP.NET MVC 사이트에 WCF를 추가하여 모바일 앱에 데이터를 제공해야합니까?
감사합니다 :-) 여기에 내부 마법을 사용할 수 있기 때문에
현실에서,이 합성 클래스의 실제 바이트 코드가되지 않을 수도 있습니다, 난 여전히 클래스 로더가하는 일에 대한 직관이없는 . 이것에 대해 조금 언급 할 수 있습니까? 클래스 로더가 아무 것도하지 않는 것에 대한 책임이있는 경우 null 클래스 로더가 작동 할 수있는 이유를 이해하는 데 여전히 어려움이 있습니다. 어쩌면 부정확 한 클래스 로더가 주어지는 장난감 예제일까요? – jonderry
'null' 클래스 로더는 "클래스", "Object", "ClassLoader"와 같은 핵심 클래스를로드하는 클래스 로더 인 "부트 스트랩 클래스 로더"입니다. VM에 의해 네이티브로 구현되어 ClassLoader 객체를 가지지 않습니다. (이것은'Class에 의해 사용됩니다.'ClassLoader' 인수로서'null '을 지정하면 (자), 예를 들어 forName가됩니다. (예는 나중에 나옵니다.) –