> Java > java지도 시간 > 본문

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

黄舟
풀어 주다: 2017-03-21 10:48:17
원래의
1533명이 탐색했습니다.

Spring Framework 4는 Java 8 언어와 API 기능을 지원합니다. 이 기사에서는 새로운 Java 8 기능에 대한 Spring 4의 지원에 중점을 둡니다. 가장 중요한 것은 LambdaExpression, MethodReference, JSR-310 날짜 및 시간, 반복 가능한 주석입니다. 아래 편집기를 사용하여 살펴보겠습니다

Spring Framework 4는 Java 8 언어 및 API 기능을 지원합니다. 이 기사에서는 새로운 Java 8 기능에 대한 Spring 4의 지원에 중점을 둡니다. 가장 중요한 것은 람다 표현식, 메소드 참조, JSR-310 날짜 및 시간, 반복 가능한 주석입니다.

람다 표현식

Spring의 코드 베이스는 Java 8의 수많은 기능적 인터페이스를 사용하며, 람다 표현식을 사용하면 더욱 깔끔하고 컴팩트한 코드를 작성할 수 있습니다. 기능적 인터페이스의 객체가 필요할 때마다 람다 표현식을 제공할 수 있습니다. 더 진행하기 전에 먼저 기능적 인터페이스에 대해 알아보겠습니다.

기능적 인터페이스

단일 추상 메소드를 갖는 인터페이스를 기능적 인터페이스라고 합니다. 다음은 JDK의 기능적 인터페이스의 몇 가지 예입니다.

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

비교기는 하나의 추상화일 뿐입니다. 비객체 메소드. 두 개의 추상 메소드를 선언했지만, 해당 객체에 해당하는 공개 메소드이기 때문에 같음은 계산에서 제외됩니다. 객체 클래스 메서드가 하나 있고 객체가 아닌 메서드가 없는 인터페이스는 기능적 인터페이스가 아닙니다.

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

인터페이스가 추상적인 비객체 클래스 메소드를 갖고 고유한 객체 클래스 메소드를 사용하여 비기능 인터페이스에서 확장되는 경우 기능적 인터페이스라고 합니다.

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

Spring 프레임워크의 기능적 인터페이스 예:

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

@FunctionalInterface 주석 인터페이스 선언의 최상위 선언에서 사용할 수 있지만 필수는 아닙니다. 이 주석은 컴파일러에서 인터페이스가 유효한 기능 인터페이스인지 여부를 감지하는 데 사용됩니다. 인터페이스에서 여러 개의 단일 추상 메서드를 정의하려고 하면 컴파일러에서 오류가 발생합니다.

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

함수 설명자

인터페이스의 함수 설명자는 인터페이스를 추상화한 것입니다. 방법의 유형입니다. 메소드 유형에는 매개변수 유형, 반환 유형 및 throws 절이 포함됩니다.

예:

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

람다 식 작성 방법

람다 식의 구문은 세 가지로 나눌 수 있습니다. 부분:

  • 화살표(–>)

  • 매개변수 목록: 람다 표현식에는 0개 이상의 매개변수가 포함될 수 있습니다. 예:

  • () → { System.out.println(“ No arguments”); 
    } (String arg) → { System.out.println(“ One argument : ”+arg); 
    } (String arg1, Integer arg2) 
    → { System.out.println(“Two arguments : ”+arg1+” and ”+arg2); }
    로그인 후 복사
  • 표현식 본문: 단일 표현식 또는 코드 블록일 수 있습니다. 단일 표현식이 평가되어 반환됩니다. 예: (String arg) → { System.out.println(“ 인수 1개 : ”+arg) } 표현식 본문(Body)에 구문 블록이 있으면 메서드 본문으로 판단하고 이후 블록이 실행됩니다. 숨겨진 return 문은 호출자에게 제어권을 부여합니다.

이제 람다 표현식을 사용하는 방법을 살펴보겠습니다.

예 1:

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

// 람다 식 사용

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

예 2:

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

//람다 식 사용

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

Spring의 콜백 함수를 통해 Lambda 표현식을 사용할 수 있습니다. 예를 들어, 주어진 JDBC 연결 목록을 검색하기 위해 ConnectionCallback을 사용하는 것은 다음 명령문으로 작성할 수 있습니다: jdbcTemplate.execute(connection -> Connection.getCatalog())

Method Reference

함수형 인터페이스는 메소드 또는 생성자를 참조하지만 호출하지는 않는 메소드 참조를 사용하여 구현할 수도 있습니다. 메서드 참조는 람다 식과 유사하지만 메서드 참조는 기존 클래스의 메서드를 참조하는 반면 람다는 익명 메서드를 기능 인터페이스의 인스턴스로 정의합니다.

Java 8의 새 패키지에는 Lambda 표현식 및 메서드 참조에 일반적으로 사용되는 기능 인터페이스인 java.util.function이 포함되어 있습니다.

Date Time API

Java의 기존 날짜 및 시간 클래스에는 여러 가지 문제가 있습니다. Date 및 Calendar 클래스의 가장 큰 문제 중 하나는 스레드로부터 안전하지 않다는 것입니다. 개발자는 날짜 처리 코드를 작성할 때 동시성 문제에 특히 주의해야 합니다. Date 클래스도 국제화를 지원하지 않으므로 시간대를 지원하지 않습니다. 개발자는 다양한 시간대를 지원하기 위해 많은 코드를 작성해야 합니다.

날짜 및 시간 클래스도 API 디자인이 좋지 않습니다. java.util.Date의 월은 0부터 시작하고 일은 1부터 시작하며 연도는 1900부터 시작됩니다. 일관성이 부족합니다. 날짜 및 시간 클래스와 관련된 이러한 문제와 기타 여러 문제는 이제 Java 8의 새로운 날짜 및 시간 API에서 해결되었습니다.

java.time 패키지에 있는 새로운 날짜 및 시간 API의 중요한 클래스는 LocalDate, LocalTime 및 ZonedDateTime입니다.

LocalDate 및 LocalTime

날짜를 나타낼 때 LocalDate의 기본 형식은 YYYY-MM-DD이며 시간은 없습니다. 이것은 불변 클래스입니다. now() 메소드를 사용하여 현재 날짜를 얻을 수 있습니다.

새 LocalDate 인스턴스 생성 예:

//현재 날짜 가져오기

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

연도, 월 및 날짜를 ​​입력할 수도 있습니다. day 새 LocalDate 인스턴스를 생성하는 매개변수입니다.

// 2016년 4월 1일

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

LocalTime은 날짜가 없는 시간을 나타내며 변경되지 않습니다. 시간의 기본 형식은 hh:mm:ss.zzz입니다.

새 LocalTime 인스턴스 생성 예:

//현재 시간 가져오기

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

// 18:30:30

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

기본적으로 LocalDate 및 LocalTime 클래스는 기본 시간대의 시스템 시계를 사용합니다. 또한 이러한 클래스는 overloaded new() 메서드를 통해 시간대 수정을 지원합니다. zoneid를 전달하면 특정 시간대의 날짜를 얻을 수 있습니다.

예:

// 콜카타(인도)의 현재 현지 날짜

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

또한 날짜를 결합하는 LocalDateTime 클래스가 있습니다. 및 시간의 경우 기본 형식은 yyyy-MM-ddTHH:MM:ss.zzz·입니다.

//현재 날짜 및 시간

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

// 2016-04-01 13:30

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

ZonedDateTime

타임존 정보를 포함한 날짜와 시간을 표현하는 데 사용되는 불변 클래스입니다. 이 클래스의 인스턴스를 사용하여 세계 일부 지역의 컨퍼런스와 같은 특정 이벤트를 나타낼 수 있습니다.

// 현재 시간은 시스템 시간과 기본 시간대를 사용합니다

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

// 현재 시간은 특정 시간대의 시스템 시계를 사용합니다

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

Spring 4는 Java 8 날짜 및 시간 API의 일부인 모든 클래스를 지원하는 변환 프레임워크를 제공합니다. Spring 4는 2016-9-10 String을 가져와 Java 8 LocalDate의 인스턴스로 변환할 수 있습니다. Spring 4는 @DateTimeFormat 주석을 통해 Java 8 날짜-시간 필드 형식 지정도 지원합니다. @DateTimeFormat은 필드가 날짜 시간으로 형식화되어야 함을 선언합니다.

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

중복 주석

Java 8 이전에는 동일한 유형의 여러 주석을 선언이나 유형(예: 클래스 또는 방법)은 허용되지 않습니다. 해결 방법으로 개발자는 이를 단일 컨테이너 주석으로 결합해야 했습니다.

예:

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

중복 주석을 사용하면 컨테이너 주석을 명시적으로 사용하지 않고도 동일한 코드를 다시 작성할 수 있습니다. 여기서는 컨테이너 주석이 사용되지 않지만 Java 컴파일러는 두 주석을 컨테이너로 패키징하는 역할을 담당합니다.

예:

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

반복 주석 정의

반복 주석을 정의하거나, 재사용 가능한 @Repeatable 주석으로 주석을 달거나, 반복 주석 유형 시리즈 속성 으로 주석을 생성합니다.

1단계: 반복 주석 유형 선언:

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

2단계 단계: 컨테이너 주석 유형을 선언합니다.

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

전체 구현은 다음과 같습니다.

Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)

런타임에 주석을 얻으려면 자세한 내용은 @Retention(RetentionPolicy.RUNTIME)으로 주석을 추가하세요.

주석 검색

getAnnotationsByType() 또는 getDeclaredAnnotationsByType()은 주석에 액세스하기 위한 Reflection API의 새로운 메서드입니다.

주석은 getAnnotation() 또는 getDeclaredAnnotation()을 사용하여 컨테이너 주석을 통해 액세스할 수도 있습니다.

결론

Spring 4는 Java 6 및 Java 7에서도 실행됩니다. Spring은 Java 8 및 Spring 4와 같이 많은 기능적 인터페이스를 사용하므로 Lambda 표현식과 기능적 인터페이스를 사용하고 더 깔끔하고 컴팩트한 코드를 작성할 수 있습니다.

위 내용은 Spring 4에서 지원하는 Java8 기능에 대한 자세한 소개(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿