같은 클래스의 여러 버전을 JVM에로드 할 수 있습니까? 나는 "XYZ"클래스의 버전을 주 스레드에로드하고 여러 작업을 수행하는 여러 개의 스레드가 있습니다. 자식 스레드에 "XYZ"클래스의 다른 버전을로드하려고합니다.클래스 파일의 여러 버전을 JVM에로드
이 것이 가능합니까? 각 자식 스레드에 대해 새로운 컨텍스트 클래스 로더를 만들고이 컨텍스트 클래스 로더를 사용하여 다른 버전의 클래스를로드하려고 생각했습니다. 지금은 컨텍스트 클래스 로더에 URLClassLoader를 사용하고 있지만 작동하지 않는 것 같습니다. 작업을 수행하기 위해 사용자 정의 클래스 로더를 작성해야합니까?
여기에 제가 지금까지 가지고있는 코드가 있습니다. I 클래스 "XYZ"의 정적 필드에 다른 값을 갖고 싶어하기 때문에
final Thread builderThread = new Thread("Child Thread " + buildToken) {
@Override
public void run() {
futureTask.run();
}
};
try {
URL url = new URL("file:///path to the jar file");
URLClassLoader classLoader = new URLClassLoader(new URL[]{url});
classLoader.loadClass("XYZ");
builderThread.setContextClassLoader(classLoader);
}
I 클래스의 다른 버전을 갖고 싶어하는 이유입니다.
디자인 문제라고 생각합니다.정적 필드가 다른 경우 정적 인 필드 만 변경하면됩니다. – TMichelsen
글쎄요, XYZ는 많은 곳에서 사용되는 레거시 클래스입니다.이 변경 작업에는 많은 노력이 필요합니다. – ajaymysore
getter 메서드를 통해 정적 필드를 노출하고 호출자 컨텍스트를 기반으로 다른 값을 반환 할 수 있습니까? 리팩토링이 많이 필요합니까? 덕분에 –