среда, 12 июня 2013 г.

Статическая и динамическая загрузка классов

Статическая загрузка классов - это всем привычная загрузка, которая производится автоматически. При запуске программы загрузчик классов рекурсивно загружает все классы, встречающиеся в программе, начиная с main-класса. Объекты таких классов создаются стандартным способом - через оператор new.

Динамическая загрузка классов производится через метод Class.forName(String className) или с использованием ClassLoader-а. Динамическая загрузка классов имеет смысл, когда требуется загрузить класс во время выполнения программы, когда нужно заменить класс, изменив, например, какую-то логику, не рестартуя приложения. Иногда может понадобиться загружать классы удаленно, например по http


Class animalClass = Class.forName("org.dmitrievs.Cat") ;
//Создается класс с конструктором по умолчанию
myAnimal = (Cat) animalClass.newInstance(); 

//загружаем класс через ClassLoader
ClassLoader classLoader = MainClass.class.getClassLoader();
Class aClass = classLoader.loadClass("com.jenkov.MyClass");
myClass = (MyClass) aClass.newInstance();

Один и тот же ClassLoader не может повторно загружать один и тот же класс, поэтому для повторной закрузки используется новый загрузчик. Подробнее можно почитать тут: http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html

Комментариев нет:

Отправить комментарий