복붙노트

[SPRING] Java 8을 사용하는 Spring 3.2.x

SPRING

Java 8을 사용하는 Spring 3.2.x

우리는 현재 봄 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에서 컴파일 할 수 없다는 것을 의미합니까? 자바 8로 컴파일하려면 스프링 버전 4.0.x를 사용해야합니까?

해결법

  1. ==============================

    1.3.2.9+에서부터 3.2.x 라인에서 JDK8에 대한 최선의 지원이 있습니다.

    3.2.9+에서부터 3.2.x 라인에서 JDK8에 대한 최선의 지원이 있습니다.

    3.2.10의 초기 지원은 SPR-11656을, 3.2.10의 바이트 코드 지원 향상은 SPR-11979를 참조하십시오. 주석에 설명 된 지원 제한 사항에 유의하십시오.

    JDK8을 포괄적으로 지원하려면 Spring 4.x로 업그레이드하십시오 - 업그레이드 경로를 설명하는 전용 위키 페이지가 있습니다. Spring 팀은 업그레이드를 정말 쉽게 할 수 있도록 많은 노력을 기울였습니다.

  2. ==============================

    2.4.0M1보다 오래된 Spring Framework 버전은 Java 8 용으로 컴파일 된 클래스에서 작동하지 않습니다.

    4.0M1보다 오래된 Spring Framework 버전은 Java 8 용으로 컴파일 된 클래스에서 작동하지 않습니다.

    Spring은 클래스 파일을 읽음으로써 이러한 클래스를 프록시하려고 시도하는데, 클래스 파일은 "너무 새로운"경우 작동하지 않습니다. @Service 클래스가 Java 8을 타겟으로 컴파일되면, Spring은 시작할 때 클래스를로드하지 못하게된다.

    즉, Java 8을 대상으로하고 (람다, 기본 구현 등을 사용하려는 경우) Spring 4.x.x로 업그레이드해야합니다.

    몇 달 전에 Spring 3.x.x를 사용하는 프로젝트로이 문제가 발생했습니다.

  3. ==============================

    3.필자가 관찰 한 바에 따르면 실제로 Java 8에서 컴파일 된 코드를 사용하여 스프링 3을 사용할 수 있습니다. 단, 스캔 한 경로에 람다와 같은 새 java8 구문을 사용하지 않는 한.

    필자가 관찰 한 바에 따르면 실제로 Java 8에서 컴파일 된 코드를 사용하여 스프링 3을 사용할 수 있습니다. 단, 스캔 한 경로에 람다와 같은 새 java8 구문을 사용하지 않는 한.

    따라서 새로운 API (스트림 ...)는 사용할 수 있지만 새로운 구문 (람다 ...)은 사용할 수 없습니다.

    내가 시도했을 때 org.springframework.beans.factory.BeanDefinitionStoreException 같은 시작 오류가 발생했다. 후보 컴포넌트 클래스를 읽지 못했다.

  4. from https://stackoverflow.com/questions/30072135/spring-3-2-x-with-java-8 by cc-by-sa and MIT license