0
我正在使用某個庫的兩個不同版本。如果用戶選擇一個對象,我會識別創建該對象的庫版本。現在我需要運行與該版本相對應的代碼。在運行時加載和卸載不同版本的jar
問題是,這兩個庫版本中的代碼都是多餘的,每個版本僅對用該版本創建的對象有效。我認爲,其後果是,我需要做在運行時執行以下操作:
- 卸罐,不需要的
- 裝入罐子,是需要的。
使用URLClassLoader可能嗎?有點像這樣?
File dirVersion3= new File("lib/dirVersion3");
File dirVersion4= new File("lib/dirVersion4");
URL[] url={dirVersion4.toURL()};
ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
URLClassLoader loader = new URLClassLoader(url, currentThreadClassLoader);
Thread.currentThread().setContextClassLoader(loader);
這是部署在應用服務器上的程序的一個獨立的Java類或部分? – Sampada
基本上,如果您爲每個庫創建一個新的類加載器,則可以同時提供兩個版本。如果你用兩個不同的(對等)類加載器加載同一個類,你會注意到由CL1加載的'ClassA'與CL2加載的'ClassA'不同,因爲CL是加載的類對象的一部分!您可以將通用代碼重構爲兩個JAR版本都使用的庫,使用通用CL或應用CL加載公共JAR,並將此CL用作特定於版本的CL的父代。 –