2014-10-04 2 views
-2

전체 프로그램을 다시 시작하지 않고도 특정 .class을 다시로드하려면 어떻게해야합니까? public void reload()을 사용하여이를 달성 할 수 있습니까? 그렇다면 어떻게 선언할까요? 가능한 경우 service.getinstance().reload()을 트리거로 사용하여 .class 파일 (service.class)을 다시 시작하려고합니다.java에서 특정 서비스를 다시로드하는 방법은 무엇입니까?

+0

"다시로드"및 "다시 시작"이란 정확히 무엇을 의미합니까? 똑같은 뜻이야? 무슨 일이? – 5gon12eder

+0

나는 당신이 "핫스왑"이라고 부르는 것을 믿습니다. –

+0

귀하의 모든 응답에 대해 클래스 –

답변

1

이전에로드 한 클래스의 새 구현을로드하려면 새 구현을 찾고이를 통해 클래스 및/또는 객체 인스턴스를 요청할 새 ClassLoader를 만들어야합니다. 이 아닌 경우은 이미 사용중인 클래스의 인스턴스를 변경합니다. ClassLoader 용 자습서는 웹에 있습니다. 자세한 내용은 내가 그들에게 추천 할 것이다.

인 오브젝트 뒤의 클래스를 수정하려는 경우 ... 핫 스왑입니다. 모든 JVM이 그것을 지원하는 것은 아니며, 어떤 변경이 이루어질 수 있는지에 대한 제한이 있습니다 (예를 들어, 기능 서명을 변경하는 것). 이것은 대화식 디버깅 도구에서 사용하기위한 것입니다. 코드 줄을 수정하고 컨텍스트에서 새 버전을 즉시 테스트 할 수 있어야하며, 스왑을 만들 수 없기 때문에 취약성이 문제가되지 않는 곳 잃어 버린 것은 최종 사용자 데이터가 아니라 개발자의 편의입니다. 일반적으로 디버깅 환경이 아닌 다른 곳에서 핫 스와핑이 필요하다고 생각한다면 틀린 것입니다.

+0

Thx을로드하기 위해 Java ClassLoader를 사용하십시오. service.class 인스턴스를 다시로드하거나 다시 시작하기 만하면됩니다. 해당 클래스에는 수정이 없습니다. 나는 클래스 로더를 제안 된대로 검사 할 것이다. 미리 감사드립니다. – Krayon

+0

서비스를 다시 시작하면 코드를 전혀 변경하지 않아도됩니다. 서비스 코드를 다시 설정하면됩니다. – keshlam

관련 문제