Spring 3.2.x с Java 8
В настоящее время мы используем весну 3.2.9. Мы подумываем обновить его до более новой версии. Когда я проверял документацию, это говорит о том, что
Along with 4.0 M1, we’ve released Spring Framework 3.2.3, containing fixes for recently reported issues but also coming with OpenJDK 8 runtime support. Spring Framework 3.2.x will support deployment on JDK 8 runtimes for applications compiled against JDK 7 (with -target 1.7) or earlier.
Означает ли это, что я не могу скомпилировать на Java 8? Должен ли я использовать весеннюю версию 4.0.x, если я хочу скомпилировать с Java 8?
3 ответа
Наилучшая поддержка JDK8 в строке 3.2.x, начиная с 3.2.9+.
См. SPR-11656 для начальной поддержки в 3.2.9 и SPR-11979 для улучшения поддержки байт-кода в 3.2.10. Обратите внимание на ограничения поддержки, описанные в комментариях.
Для всесторонней поддержки JDK8, пожалуйста, обновитесь до Spring 4.x - есть специальная вики-страница, объясняющая путь обновления, и команда Spring приложила большие усилия, чтобы сделать этот процесс обновления действительно простым.
Согласно моим наблюдениям, вы можете использовать Spring 3 с кодом, скомпилированным в Java 8, если вы не используете там новый синтаксис java8 (например, лямбда-выражения) в отсканированных путях.
Таким образом, вы можете использовать новые API (потоки...), но не новый синтаксис (лямбды...).
Когда я пытался, я заканчивал с ошибками запуска как org.springframework.beans.factory.BeanDefinitionStoreException: Не удалось прочитать класс компонента-кандидата
Версии Spring Framework, которые старше 4.0M1, не работают с классами, скомпилированными для Java 8.
Spring пытается проксировать эти классы, читая файлы классов, которые не будут работать, если они "слишком новые". Если твой @Service
классы скомпилированы с Java 8 в качестве цели, Spring не сможет загрузить классы при запуске.
Это означает, что вам придется обновиться до Spring 4.xx, если вы хотите использовать Java 8 (и использовать лямбда-выражения, реализации по умолчанию и т. Д.).
Я столкнулся с этой проблемой сам несколько месяцев назад с проектом, который использует Spring 3.xx