Я отвечаю на новые возможности Spring 5, интервьюер, чтобы произвести на меня впечатление

В последнее время, маленький партнер получил свое удовлетворение в связи с Офертой, процесс разговора с ним, что он интервьюер спросил его о весне больше проблем, самое удовлетворение, чтобы интервьюер ответить на вопросы об их собственной Спринг знания 5 ответов хорошо.

Spring5 в сентябре 2017 года издал общий выпуск, то с декабря 2013 года первый крупный релиз весны. Это обеспечивает некоторые долгожданные улучшения также была принята новая парадигма программирования, чтобы отразить принципы стиля.

Эта версия долгое время самая захватывающая версия. Spring 5 совместим с Java ™ 8 и 9 JDK, который интегрирует реакцию потока типа, чтобы обеспечить удобный последующий разрушительный путь для достижения конечной точки и разработки веб-приложений.

Конечно, это не просто реактивная версия программирования темы, поэтому многие программисты все еще возбуждены о существенных характеристиках. Он должен быть в состоянии легко расширить аварийное восстановление и отзывчивый сервис для колебаний нагрузки растет, Spring 5 хороших возможности для удовлетворения этого спроса.

Вот основное содержание Java SE 8 и Java EE модернизаций 7 API, новая реактивная модель программирования Spring 5, поддержка HTTP / 2 и Spring полную поддержку для функционального программирования с помощью Котлин. Мы представим краткий тест и повышение производительности, представили последнюю общую редакцию ядра и пружинный контейнер.

Обновление до версии Java SE 8 и Java EE 7

Предыдущая весна поддерживает некоторые версии Java брошенные, и весны 5 от «старого багажа» освобождения. Для того, чтобы воспользоваться всеми преимуществами Java особенности 8, его кодовая база была усовершенствована, и требует как минимум Java 8 версий JDK.

Пружина 5 полностью совместим с Java 9 на основе пути (путей и модулей), и он был протестирован JDK 9 тестов. Для Java 9 любителей, это хорошая новость.

На уровне API, Spring 5 совместим с 8-технологии Java EE, чтобы удовлетворить спрос на Servlet 4.0, Bean Validation 2.0 и новый формат JSON Binding API. Минимальные требования к Java EE API для V7, эта версия представляет небольшую версию для сервлетов, JPA и Bean Validation API.

Реактивная модель программирования

Весна 5 из самых захватывающих новых особенностей является реактивной моделью программирования. Пружина 5 основана на реактивной основе, построенной, и является полностью асинхронным и без блокировки. Только небольшое количество резьбы, новая модель выполнения цикла событий может быть расширена по вертикали.

Пружина 5 с использованием схемы реакции обеспечивает механизм для распространения потока отрицательного давления в схеме реакции сборки. Отрицательное давление, чтобы гарантировать, что данные из разных производителей не сделают концепцию пользователей перегружен.

Spring Spring WebFlux реактивная сердечник 5, который обеспечивает две модели программирования для Spring Web программирования, предназначенное для разработчиков: аннотации на основе модели и функциональный WebFramework (WebFlux.fn).

Аннотация на основе Spring Web MVC модель является современной альтернативой модели, основанной на реакции фундамента строится, и функциональный Web Framework базируется альтернативная модель программирования @Controller аннотаций. Эти модели выполняются по тем же правилам реакции, которые подстраиваются реактивная неблокирования HTTP потокового API.

Используйте аннотации к программе

Web MVC программист должен быть очень хорошо знакомы с Spring аннотаций на основе модели программирования 5, 5 настроить модель программирования @Controller в Spring Web MVC, используя одни и те же ноты.

В следующем классе код BookController предоставляет два метода, соответственно, в ответ на список книг для HTTP запросов и запроса HTTP для данной Ид книг. Пожалуйста, обратите внимание, что Mono и Flux и другие объекты. Эти цели достигаются в схеме спецификация потока по схеме реакции типа Издательства интерфейса, который обрабатывает ответственность потока данных. Mono объект обработки потока, содержащего только один элемент, и поток представляет собой поток, содержащий N элементов.

@RestController 
общественного класса BookController {//反应式控制器
@GetMapping ( "/ книга")
Flux <книги> Список () {
returnthis.repository.findAll ();
}
@GetMapping ( "/ книга / {ID}")
Mono <Book> findById (@PathVariable идентификатор строки) {
returnthis.repository.findOne (идентификатор);
}
}

Эти заметки для Spring веб-программирования, мы используем следующую функциональную структуру Web для решения той же проблемы.

Функциональное программирование

Весной функциональный метод делегатов просьбы к функциям обработки, которые сервер получает экземпляр запроса и возвращает ответ типа формулы. Вид кусок кода, создание класса BookHandler, где listBooks () и метод getBook () эквивалентна функции контроллера.

publicclassBookHandler { 
общественный Mono <ServerResponse> listBooks (запрос ServerRequest) {
вернуться ServerResponse.ok ()
.contentType (APPLICATION_JSON)
.Body (repository.allPeople (), Book.class);
}
Общественного Моно <ServerResponse> getBook (запрос ServerRequest) {
вернуться repository.getBook (request.pathVariable ( "ID"))
.then (книга -> ServerResponse.ok ()
.contentType (APPLICATION_JSON)
.Body (fromObject (книга)) )
.otherwiseIfEmpty (ServerResponse.notFound () построить ()).
}
}

По функции в соответствии с параметрами медиа-типа запроса HTTP маршрутизации, клиентские запросы направляются к проводнику. Следующий код показывает, библиотечные ресурсы ENDPOINT делегаты URI вызов соответствующего обработчика:

BookHandler Обработчик = новый BookHandler (); 
RouterFunction <ServerResponse> personRoute =
маршрут (
GET ( "/ книги / {ID}")
й (принимает (APPLICATION_JSON)), обработчик :: getBook)
.andRoute (
GET ( "/ книг")
й (принимает (APPLICATION_JSON) ), обработчик :: listBooks);

Данные, сохраненные за эти примерами также поддерживает полный реактивный опыт, который поддерживается Spring Data реактивной Couchbase, реактивная MongoDB и Cassandra достичь.

Реакция с использованием конечной точки REST выполняет программирование

Новая модель программирования от традиционной модели Spring Web MVC, представила некоторые новые функции.

Например, модуль WebFlux предоставляется который полностью неблокирующая RestTemplate, альтернативная реакционная схема под названием WebClient. Создание WebClient ниже, и книги вызова конечной точки для запроса заданного идентификатором 1234 книг.

//通过WebClient调用REST端点
Mono <Книга> Книга = WebClient.create ( "HTTP: // локальный: 8080")
.get ()
.url ( "/ книги / {ID}", 1234)
Признавайте (APPLICATION_JSON)
.exchange (запрос)
.then (ответ -> response.bodyToMono (Book.class));

Поддержка HTTP / 2

HTTP / 2 улучшает производительность передачи, сокращение времени ожидания и увеличение пропускной способности приложений, предоставляя богатый опыт веба.

Spring 5 обеспечивает специализированную поддержку HTTP функции / 2, также поддерживает человек, как ожидается, произойдет в новом клиенте HTTP JDK 9. Хотя HTTP / 2 сервер толчок функциональность была раскрыта в течение длительного времени с помощью класса ServerPushFilter Jetty Servlet двигателя для разработчиков Spring, но если вы найдете в Spring 5 из коробки обеспечивает повышение производительности / 2 HTTP, веб-оптимизацию тех, кто должен Мы будем болеть за этого.

Пружина 5.1 обеспечивает сервлетов 4.0, будет Tomcat 9.0, Jetty9.3 Undertow 1.4 и при условии, родной HTTP / 2 новые функции.

Котлин и Spring WebFlux

Котлин представляет собой объектно-ориентированный язык от поддержки JetBrains функционального программирования. Одним из главных преимуществ является очень высокой и Java совместимости. За счет внедрения специальной поддержки Котлин, Spring 5 полностью поглотить это преимущество. Его функциональный стиль программирования и модуль Spring WebFlux отлично сочетаются новый DSL маршрутизации функционального использования веб-структур и чистой и идиоматических кода. Такой может быть просто выраженно как конечная точка маршрутизации следующего кода:

// Котлин用于定义端点的路由DSL 
@Bean
весело apiRouter () = {маршрутизатор
(принимает (APPLICATION_JSON) и "/api").nest {
"/book".nest {
GET ("/", bookHandler :: FindAll )
GET ( "/ {ID}", bookHandler :: findOne)
}
"/video".nest {
GET (" /», videoHandler :: FindAll)
GET ( "/ {жанр}", videoHandler :: findByGenre)
}
}
}

При использовании Котлина 1.1.4 выше, добавлена ​​поддержка (с помощью дополнительных параметров со значениями по умолчанию) Котлин неизменяемых классов, а также поддержка API для полной поддержки нуля.

Использование лямбда-выражений Войти Bean

В качестве альтернативы традиционным XML и JavaConfig теперь вы можете использовать лямбда-выражений зарегистрированы Spring Bean, Боб может фактически зарегистрирован в качестве поставщика. Следующий код с помощью лямбда-выражений зарегистрировало Book Bean:

GenericApplicationContext контекст = newGenericApplicationContext (); 
context.registerBean (Book.class, () -> Новая
книга (context.getBean (Author.class))
);

Spring Web MVC поддерживает новейший API

Новый модуль WebFlux предлагает много новых и интересных возможностей, но и удовлетворить весной 5 желающих продолжать использовать потребности разработчиков Spring MVC. Пружина 5 обновила «Модель - Вид - Контроллер» структура совместима с последней версией WebFlux и Джексон 2.9 и 3.0 Protobuf, и даже включает в себя поддержку нового Java EE 8 JSON-Binding API.

В дополнение к основным HTTP / 2 функций сервера реализованы, Spring Web MVC PushBuilder сервлетов 4.0 также поддерживается контроллером параметров метода MVC. Наконец, Web-MVC полностью поддерживает объекты реактора потока и Mono 3.1, а также RxJava 1.3 и 2.1 RxJava, они рассматриваются в качестве возвращаемого значения из метода контроллера MVC. Конечная целью является поддержка Spring данные поддерживают новое WebClient реактивного и реактивное хранилище.

Использование JUnit 5 одновременных выполнения и тестовых условий

Пружина 5 и 1. JUnit

Spring5 полное принятие функциональной парадигмы, а также поддержка JUnit5 и его новый стиль функциональное тестирование. Кроме того, он обеспечивает обратную совместимость с JUnit 4, чтобы проверить, не разрушай старый код.

Spring5 набор тестов был расширен несколькими способами, но наиболее очевидным является поддержка JUnit 5. Теперь может функциональное программирование Java характеристика 8 представлены в тестовом образце. Следующий код демонстрирует эту поддержку:

@Test 
недействительными givenStreamOfInts_SumShouldBeMoreThanFive () {
assertTrue (Stream.of (20, 40, 50)
.stream ()
.mapToInt (я -> я)
.sum ()> 110, () -> "Общее должно быть больше , чем 100" );
}

2. перейти на JUnit 5

Если вы JUnit 5 перейти на стороне, углубленный анализ двух частей учебника Стив Перри будет убедить вас попробовать.

Spring5 унаследовал гибкость для реализации множества расширений API JUnit 5 в Spring Framework TestContext. Например, разработчики могут использовать JUnit 5 условий выполнения теста и аннотацию @EnabledIf для автоматического расчета @DisabledIf Spel (весна Выражения Language) выражение, и соответствующим образом включить или отключить тест. С этими аннотациями, Spring 5 поддержка комплекса условно программа испытаний ранее трудно достичь. SpringTextContext Framework теперь может одновременно выполнять тест.

3. Spring WebFlux выполнить интеграционное тестирование

Весна испытания в настоящее время содержит WebTestClient, который поддерживает конечную точку для выполнения интеграционного тестирования сервера Spring WebFlux. WebTestClient аналоговые запросы и ответы, чтобы избежать истощения ресурсов сервера, и могут связываться непосредственно с сервером инфраструктуры WebFlux.

WebTestClient может быть привязан к реальному серверу, или функции или использованию контроллера. В следующем коде, WebTestClient обязан локальный хост:

WebTestClient testClient = WebTestClient 
.bindToServer ()
.baseUrl ( "HTTP: // локальный: 8080")
.build ();

Следующий код будет привязан к WebTestClient RouterFunction:

RouterFunction bookRouter = RouterFunctions.route ( 
RequestPredicates.GET ( "/ книги"),
запрос -> ServerResponse.ok () построить ().
);
WebTestClient
.bindToRouterFunction (bookRouter)
.build () получаем () URI ( "/ книги")..
.Exchange ()
.expectStatus () isOk ().
.ExpectBody () IsEmpty ().

Упаковка и очистить заброшенный

Spring5 прекратить поддержку какой-то устаревший API. Же участь Hibernate 3 и Hibernate 4, с тем чтобы поддержать Hibernate 5, который был оставлен. Кроме того, портлеты, скорость, JasperReports, XMLBeans, СДЫ и поддержка гуава также были прекращены.

Очистка работа на уровне пакета продолжается. Пружина 5 не больше не поддерживается beans.factory.access, jdbc.support.nativejdbc, mock.staticmock (от пружинных-аспекты модуля) или web.view.tiles2M. Плитки 3 теперь минимальное требование Spring.

Весной основные общие обновления и контейнеры

Пружина 5 и улучшенный способ для сканирования компонентов распознавания, производительность крупномасштабных проектов может быть повышена. В настоящее время, сканирование выполняются во время компиляции, но добавили координаты компоненты к индексному файл META-INF / spring.components файлу. Индекс генерируется сборки задач, определенных для конкретного приложения платформы проекта.

Аннотированный меченый компонент из javax пакетов добавляется в индекс, любая @Index аннотация класс или интерфейс будет добавлен в индекс. Весна сканирования путь обычного типа не удаляется, но сохраняется в качестве запасного варианта. Есть много различных преимуществ производительности для большой базы коды, хостинга многого серверов Spring проекта сократит время запуска.

Пружина 5 также добавляет поддержку @Nullable, которая необязательно может быть использована для указания точки впрыска. Теперь пользователи должны быть готовы принять нулевое значение. Кроме того, аннотация также может быть использована, чтобы отметить этот параметр может быть нулевым, поля и возвращать значение. @Nullable IntelliJ IDEA и т.д., главным образом, для IDE, но также может быть использован и FindBugs Eclipse, так, что нулевое значение при обработке во время компиляции становится легче, без необходимости отправки NullPointerExceptions во время выполнения.

Spring Logging также повышает производительность, Commons Logging мост выходит из коробки. Теперь поддерживаются абстракции ресурсов оборонительного программирования, обеспечивая индикатор ISFILE является GetFile доступа.

Как я вижу, весна 5

Весна является наиболее важной характеристикой новой модели 5 реактивного программирования, что означает расширение обеспечивает плавный, отзывчивый сервис, основанный на главной защите в Spring. С принятием пружиной 5 людей, будущий как ожидаются, станет реактивным языком программирования с помощью разработки приложений Web и корпоративной Java.

Весна в будущем будет продолжать отражать это обязательство, поскольку SpringSecurity, Spring Data и Spring Integration, как ожидается, принять реактивные функции программирования и преимущества.

Короче говоря, Spring 5 представляет собой сдвиг великолепных разработчиков Spring очень приветствуется, но и указал путь к развитию других структур. Spring также повышена 5 Spring загрузки, Spring Cloud обеспечивает очень богатый опыт, весна не только рамки, уже стала программированием экологией.

рекомендация

отwww.cnblogs.com/hulianwangjiagoushi/p/11419632.html
рекомендация