Совместимость с Java 8 Spring
В настоящее время я перевожу свое приложение с Java 7 на Java 8, и в настоящее время я использую jar Spring 3.1.6. Будет ли это совместимо с Java 8, или мне нужно обновить Spring jar?
Я понимаю, что версия Spring 4x имеет естественную поддержку Java 8, но это критично ко времени, и я стараюсь менять как можно меньше банок.
4 ответа
В принципе Spring 3.x
версия поддерживает до Java-7
только. Если вы хотите перейти на Java-8
ты должен использовать Spring 4.x
версия.
Однако некоторые весенние заметки о выпуске говорят, что
Spring Framework 3.2.x
будет поддерживать развертывание наJDK 8
время выполнения для приложений, скомпилированных противJDK 7
(с -target 1.7) или ранее. Обратите внимание, что он не будет поддерживатьJDK 8
формат байт-кода (-Target 1.8, как необходимо для лямбда-символов); пожалуйста, обновите доSpring Framework 4.0
для этой цели.
Перейдите по этой ссылке на исходную статью.
Если некоторые библиотеки (или сама JRE) - это JDK 8 и включена функция сканирования компонентов в Spring (и сканирует эти классы libs/jdk), то минимальная версия spring - 3.2.10-RELEASE.
Причина заключается в обновлении ASM (библиотеки, которую Spring использует для сканирования скомпилированных классов и обнаружения аннотаций, реализованных интерфейсов и т. Д.) Весной.
Нет, это не совместимо. Я столкнулся с той же проблемой, и хотя многие скажут, что Java 8 полностью обратно совместима со старыми версиями java, оказывается, что это не так.
Это очень хорошее объяснение точной проблемы, с которой я столкнулся с целевым кодом Java 7 с Java 8.
https://gist.github.com/AlainODea/1375759b8720a3f9f094
Поскольку API ConcurrentHashMap изменился между двумя выпусками Java, весенние каникулы при запуске, и вы в конечном итоге
SEVERE: Context initialization failed
java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
at org.apache.catalina.core.ApplicationContext.getInitParameterNames(ApplicationContext.java:368)
at org.apache.catalina.core.ApplicationContextFacade.getInitParameterNames(ApplicationContextFacade.java:367)
at org.springframework.web.context.support.WebApplicationContextUtils.registerEnvironmentBeans(WebApplicationContextUtils.java:201)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.postProcessBeanFactory(AbstractRefreshableWebApplicationContext.java:163)
У меня не было выбора, кроме как перейти на Spring 4.x (не уверен, что 3.2 или выше сработали бы, когда я прыгнул прямо на 4.x)
Java 8 и JVM 8 полностью обратно совместимы со всеми старыми версиями Java. Java предпринимает кропотливые шаги, чтобы гарантировать, что новые выпуски не сломают старый код. Любой код, написанный для java 7, может быть скомпилирован с использованием java 8, а любой код, скомпилированный для java 7, может быть запущен на jvm 8.