Я наткнулся на следующий код в NestedRuntimeException в org.springframework.core:
static {
NestedExceptionUtils.class.getName();
}
Какая польза от такого блока?
Мне было интересно, почему нет комментариев к такой строке, поэтому я поискал источник. Конечно, прямо перед этим утверждением есть комментарий, который в значительной степени объясняет это, он просто не включен в вопрос: «С нетерпением загрузите класс NestedExceptionUtils, чтобы избежать проблем с взаимоблокировкой загрузчика классов в OSGi при вызове getMessage (). Сообщил Дон Браун; SPR- 5607 "




eagerly загрузит класс NestedExceptionUtils, чтобы избежать взаимоблокировки загрузчика классов. Сообщалось об ошибке (SPR-5607) «Нетривиальное NestedRuntimeException.getMessage () может вызвать взаимоблокировки в OSGi», и это решение той же проблемы.
Отредактировано:
Это также упоминается в исходном коде в качестве комментария. Для получения полной документации по исходному коду, пожалуйста, следуйте ссылка на сайт. Вот часть исходного кода класса NestedRuntimeException.
static {
// Eagerly load the NestedExceptionUtils class to avoid classloader deadlock
// issues on OSGi when calling getMessage(). Reported by Don Brown; SPR-5607.
NestedExceptionUtils.class.getName();
}
Спасибо, что поделились ссылкой!
Им действительно следовало добавить комментарий по этой причине.
@Bergi есть комментарий прямо перед строками, указанными в вопросе
@Bergi В исходном коде есть комментарий с причиной. Я также отредактировал и добавил эти детали. Спасибо!!!
Я предполагаю, что это уловка, заставляющая загрузчик классов JVM загружать класс
NestedExceptionUtils. Но, возможно, есть и другие причины, специфичные для Spring.