Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Закрытие URLClassLoader

Как Закрыть URLClassLoader?

URLClassLoader близко () метод эффективно устраняет проблему того, как поддерживать обновленные реализации классов и ресурсов, загруженных из определенной кодовой базы, и в особенности из файлов JAR. В принципе, как только приложение очищает все ссылки на объект загрузчика, сборщик "мусора" и механизмы завершения в конечном счете гарантируют, что все средства (такие как объекты JarFile) высвобождаются и закрываются.

Приложение может тогда заменить файл JAR, и создать новый экземпляр URLClassLoader, чтобы загрузиться от того же самого расположения, но на сей раз используя новую реализацию классов/ресурсов. Однако, так как нельзя предсказать точно, когда завершение и сборка "мусора" произойдут, проблемы вызываются для приложений, которые должны быть в состоянии сделать это предсказуемым и своевременным способом. Это - проблема на Windows, потому что открытые файлы не могут быть удалены или заменены.

В Java SE 7, URLClassLoader близко () метод эффективно лишает законной силы загрузчик, так, чтобы никакие новые классы не могли быть загружены из этого. Это также закрывает любые файлы JAR, которые были открыты загрузчиком. Это позволяет приложению удалять или заменять эти файлы и, в случае необходимости, создавать новые загрузчики, используя новые реализации.

Завершение () метод следует за знакомым образцом "Closeable", и URLClassLoader теперь реализует интерфейс Closeable, который определяет URLClassLoader.close (). Следующий пример кода показывает, как можно было бы использовать метод.

       //
       // create a class loader loading from "foo.jar"
       //
       URL url = new URL("file:foo.jar");
       URLClassLoader loader = new URLClassLoader (new URL[] {url});
       Class cl = Class.forName ("Foo", true, loader);
       Runnable foo = (Runnable) cl.newInstance();
       foo.run();
       loader.close ();

       // foo.jar gets updated somehow

       loader = new URLClassLoader (new URL[] {url});
       cl = Class.forName ("Foo", true, loader);
       foo = (Runnable) cl.newInstance();
       // run the new implementation of Foo
       foo.run();


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами