2015-06-16 2 views
1

Я использую URLClassLoader для загрузки классов из внешнего файла jar, классы, загруженные этим, могут уже присутствовать в моем загрузчике классов для веб-приложений, предположим, что загрузчик классов класса class class class class class class class class class class loader загружен классом A с версией 1 и веб-приложение уже загружено одним классом A с version2, Новый поток, запущенный webapplication, нуждается в классе A, может ли это получить A из UrlClassloader вместо webapplication classloader? если да, то как я могу избежать этого, как я могу ограничить область классов urlclassloader, чтобы обслуживать только конкретный метод?UrlClassLoader scope

Пожалуйста, советы настройки загрузчика классов в

Thread.currentThread() getContextClassLoader().

Выполнение моей работы, связанной с классами у этого загрузчика классов, и после того, как она была заменена старым загрузчиком классов?

ClassLoader oldLoader=Thread.currentThread().getContextClassLoader(); 
      Thread.currentThread().setContextClassLoader(classLoader); 
      try{ 
       siClass=classLoader.loadClass("tools.ds.Signature3"); 
       result=doWork(); 
      }catch(Exception e){ 
       throw new RuntimeException(e); 
      }finally{ 
       Thread.currentThread().setContextClassLoader(oldLoader); 
      } 
      return result; 

Этот способ я ограничиваю область действия классаLoader только для операции doWork()?

ответ

2

Ответ в Javadoc из Thread.getContextClassLoader():

Возвращает контекст ClassLoader для этой темы. Контекст ClassLoader предоставляется создателем потока для использования кодом, запущенным в этом потоке при загрузке классов и ресурсов. Если не задано, по умолчанию используется контекст ClassLoader родительского потока. Контекст ClassLoader из первичного потока обычно устанавливается на загрузчик классов, используемый для загрузки приложения.

Так что если вы не возились с этим URLClassLoader, это не должно влиять на ваши темы.

Смежные вопросы