2011-09-15 5 views
1

내 클래스 로더를 사용하여 위치에서 일부 클래스를로드하는 중입니다. 응용 프로그램 사용자가이 위치에 jar 파일을 추가 할 수 있으며 해당 jar 파일에있는 모든 클래스를로드합니다. 런타임 플러그인과 같습니다. 특정 타입의 클래스. 그런 다음이 클래스 리터럴 객체를 HashMap (특정 클래스의 필드)에 유지하고 필요할 때마다 인스턴스를 만듭니다. 일부 클래스 리터럴이이 HashMap에서 제거되면 아무도 없어야합니다 해당 클래스 리터럴의 인스턴스를 만들 수 있습니다. 클래스를 추가하는 사용자가 클래스를 언로드해야합니다. 2) 또한 사용자가 내가로드 한 모든 클래스 리터럴을 담고있는 hashMAp로 조작하는 코드를 사용해서는 안된다.Java Reflection

답변

0

나는 반사와 적절한 경험을했다,하지만 내가 제안하면 다음과 같다되지 않은 :

이 (LoadedClassesManager 말)는 클래스가 인스턴스화 모든 인스턴스의 기록을 포함. 또한 관찰 가능한 패턴을 구현해야합니다 (즉, 이벤트 리스너에 응답).

로드 된 클래스의 인스턴스화를 모두 LoadedClassManager의 메소드 호출 (예 : getNewInstance(Class clazz, params))로 호출하도록합니다. 이 메소드는 호출 객체를 리스너 (클래스가 언로드 될 때)로 등록합니다.

그래서 어떤 클래스가 언로드 될 때 이벤트 리스너의 짝수 핸들러는 클래스의 언로드를 적절히 처리하기 위해 LoadedClassesManager에 의해 호출됩니다.

+0

답변을위한 Thnx입니다. 하지만 여기에는 두 가지 문제가 있습니다. 1) 코드를 사용하여 클래스를 언로드 할 수 있습니까? (메모리에서 언로드하거나 일부 필드에만 코드를 설정해야합니다.) 2) 코드가 모든 사용자에게 공개되어 있으므로 클래스에서 내 LoadedClassManager를 사용할 수도 있습니다. 그들은 내 응용 프로그램에 추가하고 있습니다. 나는 이것을 방지하고 싶습니다. – Chandan

+0

첫 번째 문제는 여기에 대한 답변을 참조하십시오 : http://stackoverflow.com/questions/148681/unloading-classes-in-java – WaelJ

+0

두 번째 요점에 대해서는, 내가 무슨 뜻인지 잘 모르겠습니다. 사용자 코드는 소스 코드를 수정할 수 있으므로 열려 있습니다. – WaelJ

관련 문제