Довольно скоро, предположительно с версии Spring Framework 7.1, Spring будет поддерживать scripting-овые языки, такие как Python или JavaScript. Тема очень интересная, но, на самом деле, здесь стоит начать с небольшой справки, как так вообще получилось.

Немного Истории

Ранее в рамках Spring АйО мы выпускали пост, где говорили о том, что GraalVM отделяется от релизного цикла Java SE.

Сразу с места в карьер - Я общался с Томасом Вертингером на Devoxx Belgium 2025 по этому поводу - на данный момент (!) от поддержки и развития GraalVM никто не отказывается, просто проект претерпевает ряд изменений в релизном цикле и в приоритизации задач, над которыми работает.

У этого есть причины, они достойны отдельного поста, их прямо несколько, но если кратко - Oracle, насколько я понял Томаса, пытается найти ниши приме��ения Graal-у в целом (речь сейчас не только про Graal как JIT-compiler, а как проект в целом). И развитие именно GraalJS и подобных вещей с использованием Truffle это как раз попытка найти свой рынок. Чтобы было понимание, относительно недавно в базу данных Oracle была внедрена поддержка JavaScript, где в качестве JavaScript реализации как раз GraalJS.

То есть GraalVM пока продолжит развиваться, особенно если мы говорим про проекты GraalPy и GraalJS. Будем следить дальше, но пока состояние такое.

Комментарий Жени Сулейманова

То, что Spring так плотно выстраивается вокруг GraalVM (AOT, GraalPy/GraalJS), - это ставка не на "модную фишку", а "игра в долгую": более быстрый старт, меньший footprint и возможность строить polyglot-платформы, где Java - каркас, вокруг которого живут скриптовые языки. Если Oracle действительно найдет для GraalVM устойчивые продуктовые ниши, Spring почти гарантированно окажется "дефолтным" фреймворком для enterprise-стека поверх этой истории - и это важно учитывать если вы проектируете архитектуру с горизонтом планирования 5-7 лет.

Что там у Spring Framework?

Spring Framework, на самом деле, уже относительно давно имеет некоторую инфраструктуру для исполнения определённых Script-ов, в основном для Groovy:


public void runScriptExample() {
    ScriptEvaluator scriptEvaluator = new GroovyScriptEvaluator()
	//language=groovy
	String script = """
		def name = arguments.get('name')
		return 'Hello, ' + name + '! Current time is ' + System.currentTimeMillis()
		""";
	ScriptSource scriptWithArgs = new StaticScriptSource(script);
	Map<String, Object> arguments = Collections.singletonMap("name", "Spring User");
	Object result = scriptEvaluator.evaluate(scriptWithArgs, arguments);
 	System.out.println("Script result: " + result);
}

Это всё здорово, но что интересно - скоро вот как раз появится возможность в Spring Framework исполнять нативно JavaScript, Python и т.п. как раз за счет интеграции с GraalPy, GraalJS и т.п.

Зачем это Spring-у? Моё Виденье

Spring с Graal-ем да и вообще с Oracle довольно хорошие друзья. Команды плотно общались ещё со времен проекта Spring Native, который позже был интегрирован в основной trunk Spring Boot.

Чтобы Вы понимали, Graal для своих демо и гайдов часто использует Spring Petclinic как некоторое "эталонное приложение". То же самое, кстати, делает и команда OpenJDK. Иными словами, команды друг друга поддерживают как медийно, так и в плане общего развития.

В свою очередь, в последние несколько релизов Spring Framework активно старается сконцентрироваться на времени запуска приложений, на memory footprint и т.п, отчего идёт широкая поддержка Project Leyden и подобного рода проектов.

Опять же, чтобы было понимание - Spring, в частности Spring Boot, в ряде случаев использует кастомный ClassLoader (Он нужен для Fat Jar например, чтобы у Вас всё работало из коробки). К сожалению, такие вещи как JEP 483 Aot Cache (а это часть Project Leyden), не поддерживают кастомные класслоадеры. Пока не поддерживают. Команда Spring Framework об этом в курсе, и Oracle, конечно, тоже, и это в будущем, скорее всего, будут пытаться исправить.

Я не хочу сказать, что это делается исключительно ради Spring Framework, но вес Spring-а в этом есть и он вполне достаточный.

Небольшой Вывод

Давайте зададим вопрос - насколько потенциально будет много пользователей у нового API?

Я думаю не так много, с учётом ещё того факта, что при неаккрутном использовании можно получить CVE 10 на production. Я также думаю, что поддержка GraalPy и GraalJS это больше поддержка линейки продуктов Graal-я со стороны Spring Framework.

Sébastien Deleuze, который, фактически, сейчас стоит у руля Spring-а и который ранее как раз создал и лидировал проект Spring Native, довольно сильно верит в Kotlin и в Graal, о чем известно в узких кругах да и сам Себ об этом периодически рассказывает на разных ресурсах.

Себастиана я имею честь знать лично. Я его крайне сильно уважаю и считаю очень крутым и компетентным специалистом и лидером. Таких правда мало. Пожелаем ему и команде успехов.

Всем спасибо, успехов!

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.