Если ContextClassLoader предназначен для решения проблемы, заключающейся в том, что загрузчик root BootstrapClassLoader в родительской модели делегирования не может загрузить указанную реализацию c spi. То есть, когда BootstrapClassLoader не может загрузиться, используется ContextClassLoader. Но установленный ContextClassLoader также будет доверен своему родителю и, в конечном счете, доверен загрузчику root BootstrapClassLoader. Разве это не образует бесконечный цикл?