
- •JAVA-ТЕХНОЛОГИЯ
- •Определение ClassLoader
- •Виды загрузчиков
- •Применение
- •Динамическая загрузка классов
- •Применение пользовательских загрузчиков
- •Динамическая модификация классов
- •Динамическая модификация классов
- •class ClassLoader
- •Основные методы ClassLoader
- •loadClass(..)
- •Проблема – совпадающие имена
- •Решение проблемы
- •Верификация
- •Пример: CompilingClassLoader 1/7
- •CompilingClassLoader 2/7
- •CompilingClassLoader 3/7
- •CompilingClassLoader 4/7
- •CompilingClassLoader 5/7
- •CompilingClassLoader 6/7
- •CompilingClassLoader 7/7
- •Класс CCLRun 1/2
- •CCLRun 2/2
- •Класс Foo
- •Класс Bar
- •Список литературы:

JAVA-ТЕХНОЛОГИЯ
Сафонов Владимир Олегович
Профессор кафедры информатики, руководитель лаборатории Java- технологии (http://polyhimnie.math.spbu.ru/jtl)
Email: vosafonov@gmail.com
Лекция 26
Динамическая загрузка и верификация классов

Определение ClassLoader
Java class loader - компонента Java Runtime Environment, которая динамически загружает Java-классы в JVM
(С) Сафонов В.О. 2013

Виды загрузчиков
Bootstrap classloader
core.jar, server.jar (etc from $JAVA_HOME/lib)
Extensions class loader
extensions - $JAVA_HOME/lib/ext
System class loader
jars from $CLASSPATH
Пользовательский загрузчик
(С)Сафонов В.О. 2013

Применение
пользовательских загрузчиков
Загрузка классов из различных источников
java.net.URLClassLoader
java.security.SecureClassLoader
java.rmi.server.RMIClassLoader
sun.applet.AppletClassLoader
(С)Сафонов В.О. 2013

Динамическая загрузка классов
class Service {
private Object service;
public void updateService(String location){ MyClassLoader cl = new MyClassLoader(location); Class c = cl.loadClass(“Service”);
service = c.newInstance();
}
public void processRequest(...) { class c = service.getClass(); Method m = c.getMethod(“run”, ...); m.invoke(service, ...);
} |
|
... |
(С) Сафонов В.О. 2013 |
} |

Применение пользовательских загрузчиков
Динамическая загрузка классов
Динамическая модификация классов
(С) Сафонов В.О. 2013

Динамическая модификация классов
Как можно изменить класс ?
добавить новые поля
изменить существующие методы
добавить новые или удалить существующие методы (возможно появление LinkError)
(С)Сафонов В.О. 2013

Динамическая модификация классов
Примеры использования
Profiling hooks (добавление информации о времени исполнения, количестве вызовов, ...)
Осуществление контроля за выделенными ресурсами
Параметризованные классы
(С)Сафонов В.О. 2013

class ClassLoader
Принцип делегирования – java 1.2
У каждого загрузчика есть загрузчик-родитель (по умолчанию System classloader)
При загрузке класса загрузчик делегирует загрузку своему родителю, перед тем как загрузить класс самому
(С)Сафонов В.О. 2013

Основные методы
ClassLoader
protected Class findClass(String name)
ClassLoader getParent()
protected Class defineClass(String name, bytes[] array, int off, int len)
loadClass(String name, boolean resolve)
(С)Сафонов В.О. 2013