나는 봄 5의 새로운 기능에 대답, 면접관이 나를 감동

최근, 작은 파트너가 제공 자신의 만족을 가지고, 그는 면접관이 봄에 대한 더 많은 문제를 그에게 물었다있어 그에게 이야기하는 과정은, 가장 만족은 면접관이 자신의 지식 봄 5 답변에 대한 질문에 답변 할 수 있도록하는 것입니다 좋은.

Spring5 9 월 2017 년 일반 버전을 발표, 그것은 12 월 2013 년 봄의 첫 번째 주요 릴리스 이후입니다. 그것은 몇 가지 대망의 개선도 스타일의 원칙을 반영하기 위해 새로운 프로그래밍 패러다임을 채택합니다.

이 버전은 오랜 시간이 가장 흥미로운 버전입니다. 봄 5는 자바 (Java ™) 8 및 JDK (9), 엔드 포인트를 달성 할 수있는 편리한 이후의 파괴적인 방법을 제공하는, 플로우 형 반응을 통합, 웹 애플리케이션 개발과 호환됩니다.

물론, 이것은 중요한 특성에 대한 많은 프로그래머는 여전히 흥분, 테마의 단지 반응 프로그램의 버전이 아닙니다. 봄 (5)는 잘 수요를 충족하기 위해 위치, 증가 그것은 완벽하게 재해 복구 및 부하 변동에 대한 대응 서비스를 확장 할 수 있어야합니다.

여기에 코 틀린에 의해 기능 프로그래밍을위한 자바 SE 8 및 자바 EE 7 API 업그레이드, 새로운 반응 프로그래밍 모델 봄 (5), HTTP / 2에 대한 지원, 그리고 봄을 완벽하게 지원의 기본 내용입니다. 우리는 간단한 테스트 및 성능 향상, 코어의 도입 마지막 일반 버전과 스프링 컨테이너를 소개합니다.

자바 SE 8 및 자바 EE 7로 업그레이드

이전 봄은 "오래된 짐"해방에서 자바 버려진 버전, 그리고 봄 (5)의 일부를 지원하고있다. 자바를 최대한 활용하기 위해 자사의 코드베이스가 향상되었습니다, 8 기능 및 Java 8 JDK 버전의 최소 필요합니다.

봄 5는 경로 (경로 및 모듈)을 기반으로 자바 (9)와 완벽하게 호환이며, JDK (9) 테스트 스위트를 테스트되었습니다. 자바 9 개 애호가의 경우,이 좋은 소식이다.

이 API 수준에서, 봄 (5)는 서블릿 4.0, 콩 검증 2.0 및 API의 바인딩 새로운 JSON에 대한 수요를 충족하기 위해 자바 EE (8) 기술과 호환됩니다. V7에 대한 최소 요구 사항 자바 EE API는이 버전은 서블릿, JPA 및 콩 검증 API의에 대한 부 버전을 소개합니다.

반응성 프로그래밍 모델

가장 흥미로운 새 기능의 봄 5는 반응 프로그래밍 모델이다. 봄 5는 건설 반응 기준에 따라, 완전히 비동기 및 비 차단이다. 스레드의 소량 만이 새로운 이벤트 루프 실행 모델은 수직으로 확장 될 수있다.

반응 방식을 사용하여 스프링 (5)는 반응식 조립체 부압의 흐름을 확산하기위한 메커니즘을 제공한다. 음의 압력은 여러 업체에서 데이터를 압도 사용자의 개념을하지 않도록하는 것입니다.

주석 기반의 모델과 기능 WebFramework (WebFlux.fn) : 봄 봄 WebFlux는 Spring 웹 개발자를 위해 설계 프로그래밍을위한 두 가지 프로그래밍 모델을 제공 반응 코어 5입니다.

주석 기반의 스프링 웹 MVC 모델은 내장 된 재단의 반응을 기반으로 현대적인 대안 모델이며, 기능적인 웹 프레임 워크는 다른 @Controller 어노테이션 프로그래밍 모델을 기반으로합니다. 이 모델은 반응 블로킹 HTTP 스트리밍 API를 수용하기 위해 조정 같은 반응 규칙에 의해 실행됩니다.

프로그램 주석을 사용하여

웹 MVC 프로그래머는 스프링 주석 기반의 프로그래밍 모델 (5, 5)가 같은 노트를 사용하여 스프링 웹 MVC의 @Controller 프로그래밍 모델을 조정 매우 잘 알고 있어야합니다.

다음 코드 BookController는 클래스에서 지정된 ID 책에 대한 HTTP 요청과 HTTP 요청에 대한 도서 목록에 대한 응답으로, 각각 두 가지 방법을 제공합니다. 그 모노 및 플럭스 및 기타 목적을 유의하시기 바랍니다. 이러한 개체는 데이터 스트림을 처리하는 책임 반응식 흐름 명세 반응식 출판사 인터페이스 유형에 달성된다. 오직 하나의 원소를 함유하는 스트림을 처리하는 개체 및 플럭스 N 원소를 포함하는 스트림을 나타내는 모노.

@RestController 
공용 클래스 BookController는 {//反应式控制器
@GetMapping ( "/ 도서")
플럭스 <책> 목록 () {
returnthis.repository.findAll ();
}
@GetMapping ( "/ 도서 / {ID}")
모노 <책> findById 메소드 (@PathVariable 문자열 ID) {
returnthis.repository.findOne (ID);
}
}

이들은 봄 웹 프로그래밍에 대한 내용이므로 우리는 같은 문제를 해결하기 위해 다음과 같은 기능 웹 프레임 워크를 사용합니다.

기능적 프로그래밍

대표 스프링 기능에있어서, 상기 서버가 요청 된 인스턴스를 수신하고, 화학식의 유형에 대한 응답을 반환하는 처리 기능에 대한 요청. 코드 부분의 뷰 클래스 BookHandler 상기 listBooks () 및 getBook () 메소드를 생성 컨트롤러의 기능에 상당한다.

publicclassBookHandler { 
공개 모노 <ServerResponse> listBooks (ServerRequest에 요청) {
ServerResponse.ok을 (복귀)
.contentType (APPLICATION_JSON)
.body (repository.allPeople () Book.class);
}
공공 모노 <ServerResponse> getBook (ServerRequest에 요청) {
반환 repository.getBook (request.pathVariable ( "ID"))
그 때는 (책 -> ServerResponse.ok ()
.contentType (APPLICATION_JSON)
.body (fromObject (책)) )
.otherwiseIfEmpty (ServerResponse.notFound () 구축 ()).;
}
}

HTTP 요청 유형의 미디어 매개 변수와 일치하는 라우팅 기능을함으로써, 클라이언트 요청 핸들러로 라우팅됩니다. 다음 코드는 도서관 자원의 엔드 포인트 URI 대표에게 적절한 핸들러에 대한 호출을 보여줍니다

BookHandler 핸들러 = 새로운 BookHandler (); 
RouterFunction <ServerResponse> personRoute =
경로 (
GET ( "/ 책 / {ID}")
.and (동의 (APPLICATION_JSON)), 핸들러 :: getBook)
.andRoute (
( "/ 책을") GET
.and (동의 (APPLICATION_JSON) ), 핸들러 :: listBooks);

이 예제 뒤에 저장된 데이터는 또한 달성하기 위해 스프링 데이터 반응 카우치베이스 주식회사, 반응성 MongoDB를하고 카산드라 지원하는 전체 반응 경험을 지원합니다.

나머지 엔드 포인트를 사용하여 반응을 수행 프로그래밍

기존의 스프링 웹 MVC 모델의 새로운 프로그래밍 모델, 멋진 새로운 기능을 소개했다.

예를 들어, WebFlux 모듈은 완전히 비 차단 RestTemplate 대안 반응식 불리는 웹 클라이언트이다 제공된다. 아래의 웹 클라이언트를 작성하고 호출 책은 지정된 ID를 1234 권의 책을 요청하는 엔드 포인트.

//通过웹 클라이언트调用REST端点
모노 <책> 책 = WebClient.create ( "HTTP : // 로컬 호스트 : 8080")
갔지 ()
.URL ( "/ 책 / {ID}", 1234)
.accept (APPLICATION_JSON)
.exchange (요청)
그 때는 (답변 -> response.bodyToMono (Book.class));

HTTP / 2 지원

HTTP / 2는 풍부한 웹 경험을 제공, 전송 성능, 대기 시간 감소 및 증가 된 처리량 응용 프로그램을 향상시킵니다.

스프링 (5) 또한 JDK 9 새로운 HTTP 클라이언트에서 발생할 것으로 예상되는 사람들을 지원, 전문 HTTP / 2 기능 지원을 제공합니다. 비록 HTTP 푸시 기능이 봄 개발자 ServerPushFilter 클래스 부두 서블릿 엔진에 의해 오랫동안 공개,하지만 당신은 상자 밖으로 봄 5에 발견하면 것은 HTTP / 2 성능 향상, 그 중 웹 최적화해야을 제공하고있다 / 2 서버 우리는이 목적을 위해 응원합니다.

스프링 5.1은 서블릿 4.0, HTTP / 2의 새로운 기능은 톰캣 9.0, Jetty9.3 물러 1.4 기본 제공됩니다 제공합니다.

코 틀린 봄 WebFlux

코 틀린는 JetBrains의 지원 함수형 프로그래밍에서 객체 지향 언어입니다. 주요 장점 중 하나는 매우 높은 및 Java 상호 운용성이다. 코 틀린에 대한 특별 지원의 도입을 통해, 봄 5는 완전히 이러한 장점을 흡수합니다. 그 함수형 프로그래밍 스타일과 봄 WebFlux 모듈은 완벽하게 웹 프레임 워크와 깨끗하고 관용적 인 코드의 새로운 라우팅 DSL 기능 사용을 일치합니다. 이러한 간단하게 다음 코드를 라우팅 끝점으로 표현 될 수있다 :

// 코 틀린用于定义端点的路由DSL 
@Bean
재미있는 apiRouter () = 라우터 {
(동의 (APPLICATION_JSON)와 "/api").nest가 {
"/book".nest는 {
GET ( "/", bookHandler :: findall은 )
) "/ {ID를}"(bookHandler :: findOne을 GET
}
"/video".nest {
GET을 ("/ ", videoHandler :: findall은)는
(GET"/ {장르} ", videoHandler :: findByGenre)
}
}
}

위의 코 틀린 1.1.4를 사용하는 경우, 그것은 널의 전폭적 인 지원을 위해 코 틀린 불변 클래스 (기본값 선택적 매개 변수를 통해) 지원 및 API 지원을 추가합니다.

람다 표현식 콩 서명 사용

지금 람다 표현식을 사용할 수 있습니다 기존의 XML 및 JavaConfig에 대한 대안이 봄 콩 등록으로, 콩은 실제로 공급자로 등록 할 수 있습니다. 람다 표현식을 사용하여 다음 코드는 도서 콩 등록 :

GenericApplicationContext 컨텍스트 newGenericApplicationContext = (); 
context.registerBean (Book.class, () -> 새로운
도서 (context.getBean (Author.class))
);

스프링 웹 MVC 최신 API를 지원

새로운 WebFlux 모듈은 많은 새롭고 흥미로운 기능을 제공뿐만 아니라, 스프링 MVC 개발자의 요구를 계속 사용하고자하는 봄 (5)를 수용. 업데이트 된 스프링 (5) "-보기 - 모델 컨트롤러"프레임 워크는 WebFlux 잭슨 2.9 Protobuf 3.0의 최신 버전과 호환 가능하며, 심지어 새로운 자바 EE 8 JSON-바인딩 API의의에 대한 지원이 포함되어 있습니다.

구현 기본 서버 HTTP / 2 기능 외에도, 스프링 웹 MVC PushBuilder 서블릿 4.0는 또한 매개 변수 컨트롤러 MVC 방법에 의해 지원. 마지막으로, 웹 MVC 완전히 원자로 플럭스 개체와 모노 3.1을 지원뿐만 아니라 RxJava 1.3 RxJava 2.1로, 그들은 MVC 컨트롤러 메서드의 반환 값으로 처리됩니다. 궁극적 인 목표는 봄의 데이터가 새로운 웹 클라이언트 반응 및 반응 저장소를 지원하는 지원하는 것입니다.

JUnit을 5 개 동시 실행 및 테스트 조건을 사용하여

스프링 (5)과 1 JUnit을

기능 패러다임의 Spring5 전체 수용 및 지원 JUnit5과 새로운 스타일의 기능 테스트. 또한 그것은 이전 코드를 파괴하지 않는 것을 보장하기 위해 JUnit 4에서는 이전 버전과의 호환성을 제공합니다.

Spring5 테스트 스위트는 여러 가지 방법으로 향상되었습니다 있지만, 가장 확실한는 JUnit을 5 지원입니다. 지금 함수형 프로그래밍 특성 자바 (8)는 테스트 유닛에 제공 할 수 있습니다. 다음 코드는이 지원을 보여줍니다

@Test 
공극 givenStreamOfInts_SumShouldBeMoreThanFive () {
assertTrue (Stream.of (20, 40, 50)
.stream ()
.mapToInt (I -> I)
.sum ()> (110), () -> "총되어야 이상 100" );
}

2. JUnit을 5로 마이그레이션

당신은 5, 무릎 부상으로 업그레이드 두 부분으로 튜토리얼 스티브 페리에 대한 심층 분석을 시도하도록 설득하기 위해 JUnit을합니다.

Spring5 봄 TestContext 프레임 워크의 여러 확장 API의 JUnit을 5를 구현할 수있는 유연성을 물려 받았다. 예를 들어, 개발자는 자동으로 테스트를 @DisabledIf SpEL은 (스프링 표현 언어) 식을 계산하고 적절하게 사용하거나 사용하지 않도록 설정할 수 @EnabledIf의 JUnit 5 개 테스트 실행 조건 주석을 사용할 수 있습니다. 이러한 주석으로, 봄 5 지원 복잡한 조건 테스트 프로그램 이전에 어려운 달성했다. SpringTextContext 프레임 워크는 이제 동시에 테스트를 실행할 수 있습니다.

3. 봄 WebFlux 통합 테스트를 수행

봄 테스트는 이제 봄 WebFlux 서버의 통합 테스트를 수행 할 수있는 엔드 포인트를 지원하는 WebTestClient가 포함되어 있습니다. WebTestClient 아날로그 요청과 응답은 서버 자원의 고갈을 방지하고, 인프라 WebFlux 서버에 직접 바인딩 할 수 있습니다.

WebTestClient은 실제 서버 또는 기능 또는 컨트롤러의 사용에 바인딩 할 수 있습니다. 다음 코드에서 WebTestClient는 로컬 호스트에 바인딩 :

WebTestClient TestClient을 = WebTestClient 
.bindToServer ()
.baseUrl (에 "http : // localhost를 : 8080")
.build ();

다음 코드는 WebTestClient RouterFunction에 바인딩합니다 :

RouterFunction bookRouter = RouterFunctions.route ( 
RequestPredicates.GET ( "/ 도서"),
요청 -> ServerResponse.ok ()를 구축 ().
);
WebTestClient
.bindToRouterFunction (bookRouter)
.build () () 얻을 URI ( "/ 도서")..
.exchange ()
.expectStatus () isOk ().
.expectBody () IsEmpty 함수 ().;

포장 및 포기 정리

Spring5는 일부 오래된 API에 대한 지원을 종료합니다. 동일한 운명 3 절전 모드 및 절전 버려진 5를 지원하기 위해, 4 절전 갖는다. 또한, 포틀릿, 속도는 JasperReports를는 XML 빈스는 JDO 구아바 지원은 종결되었다.

패키지 수준에서 정리 작업이 계속됩니다. 봄 5는 더 이상 또는 web.view.tiles2M (스프링 측면 모듈에서) beans.factory.access, jdbc.support.nativejdbc, mock.staticmock을 지원하지 않습니다. 타일 ​​3은 이제 봄의 최소 요구 사항입니다.

봄 핵심 일반적인 업데이트 및 용기

스프링 (5)과 인식 성분을 주사하기위한 개선 된 방법은 대규모 프로젝트의 성능을 높일 수있다. 현재, 주사는 컴파일 시간에 수행되지만, 인덱스 파일 META-INF / spring.components 파일 컴포넌트의 좌표를 추가했다. 인덱스는 프로젝트 응용 프로그램 특정 플랫폼에 대해 정의 된 빌드 작업에 의해 생성됩니다.

javax의 패키지에서 주석 표시 구성 요소가 인덱스에 추가됩니다, 어떤 @index는 클래스 또는 인터페이스가 인덱스에 추가됩니다 주석. 기존 유형의 봄 스캔 경로는 삭제되지 않습니다,하지만 대체 옵션으로 유지됩니다. 시작 시간을 단축 많은 서버의 봄 프로젝트를 호스팅 큰 코드베이스에 대한 많은 고유 한 성능 이점이있다.

스프링 (5)은 선택적으로 주입 지점을 나타 내기 위해 사용될 수있다 @Nullable에 대한 지원을 추가한다. 사용자는 이제 null 값을 받아 들일 준비해야합니다. 또한, 특수 효과는이 파라미터가 널이 될 수있다 표시 필드 및 값을 반환 할 수있다. 등 @Nullable하게 IntelliJ IDEA 주로 IDE 용뿐만 아니라 사용될 수 있고 FindBugs 이클립스 컴파일 시간 처리에 널값을 런타임 NullPointerExceptions를 보낼 필요없이 쉽게되도록.

봄 로그는 성능을 향상 커먼즈 로깅 다리는 상자 밖으로 온다. 이제 자원 추상화 방어 프로그래밍 지원, ISFILE 표시를 제공하는 대해서 getFile 액세스입니다.

나는 봄 5 참조 어떻게

봄 확장 스프링의 주요 보호에 따라 원활한, 대응 서비스를 제공 약자 새로운 5 반응 프로그래밍 모델의 가장 중요한 특성이다. 봄 오명의 채택과 함께, 미래는 자바 웹 및 엔터프라이즈 애플리케이션 개발을 사용하여 반응 프로그래밍 언어가 될 것으로 예상된다.

SpringSecurity, 봄 데이터와 Spring 통합이 반응 프로그래밍 기능 및 장점을 채택 할 것으로 예상되기 때문에 봄 미래는이 약속을 반영 할 것입니다.

즉, 봄 (5)는 크게 변화 화려한 봄 개발자를 대표 환영합니다,뿐만 아니라 다른 프레임 워크의 개발을 향한 경로를 지적했다. 봄도 5 봄 부팅 업그레이드, 봄 구름 봄은 이미 프로그래밍 생태가되었다, 단지 프레임 워크 아니라, 매우 풍부한 경험을 제공합니다.

추천

출처www.cnblogs.com/hulianwangjiagoushi/p/11419632.html