Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Кастомная загрузка классов Java

Добрый день! Реализовал свой собственный загрузчик, переопределив findClass(..). Загрузка происходит без ошибок.Но если системный загрузчик обнаружит в classpath валидный класс, то и загрузит его.Мой кастомный find() вызван не будет! Можно ли это как-то избежать, что бы загружать классы по-своему. даже если они есть в classpath ?


Ответ

Так работают загрузчики в jvm. Сначала вызывается родительский загрузчик и только если он не найдет класс то дочерний загрузчик будет искать класс сам. Надо переопределить loadClass(String, boolean) и для тех класов, которые должны быть загружены данным загрузчиком самому вызывать findClass, а для остальных использовать существующукю схему. protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { if (name.startsWith("myspecificclasspackage")) { Class c = findLoadedClass(name); c = c == null ? findClass(name) : c; if (resolve) { resolve(c); } return c; }
return super.loadClass(name, resolve); } }

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

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