Вы можете написать небольшое приложение-загрузчик, которое создаст новый пользовательский загрузчик классов . Классы вашего приложения могут быть загружены с помощью этого загрузчика классов.
В пользовательском загрузчике классов вы можете затем генерировать ClassNotFoundException, когда ваше приложение пытается получить доступ к классу, который вы хотите поместить в черный список.
Вам потребуется перегрузить метод load (). Этот метод будет отвечать за создание исключения в ваших занесенных в черный список классах или за передачу родительского загрузчика классов, если класс разрешен. Пример реализации:
public Class loadClass(String name) throws ClassNotFoundException {
if(name.equals("javax.lang.ClassIDontLike")){
throw new ClassNotFoundException("I'm sorry, Dave. I'm afraid I can't do that.");
}
return super.loadClass(name, false);
}
(Конечно, реальная реализация может быть более сложной, чем эта)
Поскольку классы вашего приложения загружаются через этот Classloader, и вы делегируете вызовы loadClass () родительскому загрузчику классов, когда вы хотите, вы можете занести в черный список любые нужные вам классы.
Я почти уверен, что это метод, который Google использует для внесения в черный список классов на их сервере. Они загружают каждое приложение в определенный Classloader. Это также похоже на способ, которым Tomcat изолирует различные веб-приложения.