как spring boot понимает какую версию зависимостей подгружать
Решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже)
Рассказать, как работает Spring Boot, для чего он нужен, какая от него польза?
Особенности Spring Boot
Spring Boot обладает большим функционалом, но его наиболее значимыми особенностями являются: управление зависимостями, автоматическая конфигурация и встроенные контейнеры сервлетов
2.1. Простота управления зависимостями
Чтобы ускорить процесс управления зависимостями, Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику посредством так называемых starter-пакетов (spring-boot-starter-web, spring-boot-starter-data-jpa и т.д.)
Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Это позволит получить универсальное решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже)
Например, если вы хотите начать использовать Spring Data JPA для доступа к базе данных, просто включите в свой проект зависимость spring-boot-starter-data-jpa и все будет готово (вам не придется искать совместимые драйверы баз данных и библиотеки Hibernate)
Если вы хотите создать Spring web-приложение, просто добавьте зависимость spring-boot-starter-web, которая подтянет в проект все библиотеки, необходимые для разработки Spring MVC-приложений, таких как spring-webmvc, jackson-json, validation-api и Tomcat
Другими словами, Spring Boot собирает все общие зависимости и определяет их в одном месте, что позволяет разработчикам просто использовать их, вместо того, чтобы изобретать колесо каждый раз, когда они создают новое приложение
Следовательно, при использовании Spring Boot, файл pom.xml содержит намного меньше строк, чем при использовании его в Spring-приложениях
2.2. Автоматическая конфигурация
Второй превосходной возможностью Spring Boot является автоматическая конфигурация приложения
После выбора подходящего starter-пакета, Spring Boot попытается автоматически настроить Spring-приложение на основе добавленных вами jar-зависимостей
Например, если вы добавите Spring-boot-starter-web, Spring Boot автоматически сконфигурирует такие зарегистрированные бины, как DispatcherServlet, ResourceHandlers, MessageSource
Если вы используете spring-boot-starter-jdbc, Spring Boot автоматически регистрирует бины DataSource, EntityManagerFactory, TransactionManager и считывает информацию для подключения к базе данных из файла application.properties
Если вы не собираетесь использовать базу данных, и не предоставляете никаких подробных сведений о подключении в ручном режиме, Spring Boot автоматически настроит базу в памяти, без какой-либо дополнительной конфигурации с вашей стороны (при наличии H2 или HSQL библиотек)
Автоматическая конфигурация может быть полностью переопределена в любой момент с помощью пользовательских настроек
2.3. Встроенная поддержка сервера приложений — контейнера сервлетов
Каждое Spring Boot web-приложение включает встроенный web-сервер. Посмотрите на список контейнеров сервлетов, которые поддерживаются «из коробки»
Разработчикам теперь не надо беспокоиться о настройке контейнера сервлетов и развертывании приложения на нем. Теперь приложение может запускаться само, как исполняемый jar-файл с использованием встроенного сервера
Если вам нужно использовать отдельный HTTP-сервер, для этого достаточно исключить зависимости по умолчанию. Spring Boot предоставляет отдельные starter-пакеты для разных HTTP-серверов
Создание автономных web-приложений со встроенными серверами не только удобно для разработки, но и является допустимым решением для приложений корпоративного уровня и становится все более полезно в мире микросервисов. Возможность быстро упаковать весь сервис (например, аутентификацию пользователя) в автономном и полностью развертываемом артефакте, который также предоставляет API — делает установку и развертывание приложения значительно проще
Рассказать, как Spring Boot понимает какую версию зависимостей подгружать.
Можно ли указать свою версию той или иной зависимости и как?
version >1.4.1.RELEASE version >
Перевести запросы в базу данных на Spring Data не используя SQL и HQL.
Рассказать, как формируются запросы через Spring Data.
доступ к данным б о льшая часть запросов делается только к одной сущности и при этом выполняется фильтрация по значениям полей этой сущности.
Какие методы есть в CRUD-репозитории?
Возвращает количество доступных сущностей.
Удаляет данную сущность.
Удаляет все объекты, управляемые репозиторием.
Удаляет указанные объекты.
Удаляет объект с данным идентификатором.
Возвращает, существует ли сущность с данным идентификатором.
Возвращает все экземпляры типа.
Возвращает все экземпляры типа T с заданными идентификаторами.
Получает объект по его идентификатору.
S
Сохраняет данную сущность.
Iterable
Сохраняет все заданные сущности.
Что такое Bootstrap и как он работает, какие технологии использует?
Bootstrap — это открытый и бесплатный HTML, CSS и JS фреймворк, который используется веб-разработчиками для быстрой вёрстки адаптивных дизайнов сайтов и веб-приложений.
Рассказать про сетку Bootstrap.
Мощная система гибких сеток для мобильных устройств, для удобной верстки и расположения элементов любых видов и размеров. Используется система «12 колонок», 5-ти адаптивных ярусов, препроцессоров Sass и десятков предустановленных классов.
Система сеток Bootstrap 4 использует контейнеры, ряды и колонки, чтобы удобно располагать содержимое. Бутстрап реализован с помощью флексбокса и полностью адаптивен.
Колонки должны быть прямыми потомками Row
Row используются только для того, чтобы включать в себя колонки и не для ничего больше.
Row должны быть помещены внутри контейнера
Рассказать про преимущества и недостатки REST-сервисов
Рассказать про responseBody и requestBody.
Когда необходимо, чтобы результат работы метода в контроллере был выведен непосредственно в тело ответа на запрос, а не послужил адресом перехода и не был помещён как параметр в модель, нужно указать непосредственно перед методом аннотацию @ResponseBody.
HTTP-запрос кроме заголовков и параметров имеет также основуную часть – тело запроса. Её содержимон также может быть распознано как параметр в методе контроллера. Для того, чтобы это произошло, необходимо указать @RequestBode в объявлении этого параметра.
Поскольку происходит распознавание всего тела запроса как объекта, нет возможности объявить более чем один параметр с аннтоацией @ RequestBody. Поэтому, если требуется получить от клиента несколько объектов, приходится создавать на сервере специальный «транспортный класс», объединяющий эти объекты в одну структуру – и принимать от клиента объект-экземпляра такого класса.
Рассказать про ResponseEntity.
ResponseEntity представляет полный HTTP-ответ: код состояния, заголовки и тело. Поэтому его можно использовать для полной настройки HTTP-ответа.
Для его использования, мы должны вернуть его из конечной точки.
Является универсальным типом. В результате можем использовать любой тип в качестве ответа. Можно устанавливать заголовки HTTP.
Предоставляет два вложенных интерфейса компоновщика: HeadersBuilde и его подинтерфейс BodyDuilder. Следовательно можно получить доступ к их возможностям через статические методы ResponseEntity.
Как получить сущность, как параметр?
public String savePage ( @RequestBody String pageContent ) <
Как выглядит массив в формате json?
В JSON элементами массива могут быть строки, числа, объекты, массивы, Boolean и null.
Могут быть значениями свойств объектов:
<
“name”:”John”,
“age”;30,
“cars”; [ “Ford”, “Bmw”, “Fiat” ]
>
Существуют вложенные массивы.
Какую библиотеку json использует Spring?
Что такое AJAX?
AJAX – это асинхронный JavaScript и XML. Набор методов веб-разработки, которые позволяют веб-приложениям работать асинхронно – обрабатывать любые запросы к серверу в фоновом режиме.
Чем аннотация RestController отличается от Controller?
Основная разница, заключается в способе создания тела HTTP ответа. MVC контроллен оприрается на технологию view, RESTfull веб сервис контроллер возвращает объект, который предоставляется в HTTP ответе в виде JSON или XML
Проверить, что страница не перезагружается при действиях CRUD.
Рассказать про RestTemplate, какие есть методы?
Класс RestTemplate является центральным инструментов для выполнения HTTP-операций на стороне клиента в Spring. Предоставляет несколько служебных методов для построения HTTP-запросов и обработки ответов. Может сериализовать/десериализовать большинство объектов JSON и из него без особых усилий.
Spring Boot vs Spring MVC vs Spring — Как они сравниваются?
Spring Boot vs Spring MVC vs Spring — Как они сравниваются?
Spring, Spring Boot, Spring MVC, везде есть слово “spring”! Давайте пройдемся где и когда вы можете применять каждый из этих инструментов
В этой статье, вы увидите обзоры: Spring, Spring MVC, и Spring Boot, узнаете какие проблемы они решают, и где они лучше всего применимы. Самый важный в факт что вы узнаете, является тем что Spring, Spring MVC, и Spring Boot не конкурируют за одно и то же место. Они решают разные проблемы, и они решают их очень хорошо.
Что за основная проблема, которую этот Spring Framework решает?
Долго и упорно подумайте. Какова проблема, решаемая Spring Framework?
Почему это важно? Потому что, когда DI или IOC правильно используются, мы можем разрабатывать слабо связанные приложения. А слабо связанные приложения могут быть легко протестированы юнит-тестами.
Давайте рассмотрим простой пример.
Пример без внедрения зависимостей
Рассмотрим пример ниже: WelcomeController зависит от WelcomeService, чтобы получить приветственное сообщение. Что он делает, чтобы получить экземпляр WelcomeService?
Эта строка создает экземпляр данного сервиса. А это значит что они сильно связаны. Например, если я создаю мок для WelcomeService в юнит-тесте для WelcomeController, как мне заставить WelcomeController использовать мок? Не легко!
Простой пример с внедрением зависимостей
Мир выглядит намного проще с внедрением зависимостей. Вы позволяете Spring Framework делать тяжелую работу. Мы просто используем две простые аннотации: Component и Autowired.
В юнит-тесте, я могу попросить Spring framework подключить мок для WelcomeService к WelcomeController. (Spring Boot делает вещи проще делая это с аннотацией @MockBean. Но это уже совсем другая история!)
Что еще решает Spring Framework?
Проблема 1: Дублирование/Загрязнение кода
Останавливается ли Spring Framework с внедрением зависимостей? Нет. Он строится на основной концепции внедрения зависимостей с несколькими модулями Spring
Приносят ли эти модули новую функциональность? Нет. Мы можем делать все это на J2EE или Java EE. Так, что они приносят? Они приносят простые абстракции. Целью этих абстракций является:
Проблема 2: хорошее интегрирование с другими фреймворками
Отличная вещь насчет Spring Framework, это то, что он не пытается решать проблемы которые уже решены. Все что он делает, это предоставляет отличную интеграцию с другими фреймворками, которые в свою очередь предоставляют отличные решения.
Почему нам нужен Spring Boot?
У приложений, основанных на Spring, много конфигураций.
Когда мы используем Spring MVC, нам необходимо сконфигурировать: component scan, dispatcher servlet, view resolver, web jars(для доставки статического контента) среди других вещей.
Код ниже показывает типичную конфигурацию dispatcher servlet в web приложении.
Когда мы используем Hibernate/JPA, нам надо сконфигурировать источник данных, фабрику менеджера сущностей, менеджер транзакций, и другие штуки.
Проблема 1: Spring Boot авто конфигурация: Можем ли мы думать иначе?
Spring Boot приносит новый мыслительный процесс вокруг всего этого.
Проблема 2: Spring Boot Starter Projects: Построен вокруг хорошо известных паттернов
Давайте скажем что хотим разработать веб приложение.
Прежде всего нам потребуется определить фреймворки, которые хотим использовать, какие версии использовать и как их вместе подсоединить.
У всех веб приложений аналогичные потребности. Ниже перечислены зависимости которые используются в Spring MVC. Они включают в себя Spring MVC, Jackson Databind, Hibernate-Validator и Log4j.
Если вы хотите разрабатывать веб приложение или приложение для RESTful сервисов, ваш выбор — Spring Boot Start Web. Давайте быстро создадим проект с Spring Boot Starter Web используя Spring Initializr.
Зависимости для Spring Boot Starter Web
Следующий скриншот показывает разные зависимости, которые были добавлены в наше приложение.
Зависимости могут быть классифицированы на:
Параметры проекта Spring Boot Starter
Как мы видим из Spring Boot Starter Web, стартовые проекты помогают нам быстро начать разработку определенных типов приложений.
Другие цели Spring Boot
Также есть несколько стартеров для технических вещей:
Вопросы на собеседовании Spring Boot
1. Введение
С момента своего появления Spring Boot был ключевым игроком в экосистеме Spring. Этот проект значительно упрощает нашу жизнь благодаря возможности автоматической настройки.
В этом руководстве мы рассмотрим некоторые из наиболее распространенных вопросов, связанных с Spring Boot, которые могут возникнуть во время собеседования.
2. Вопросы
Q1. Что такое Spring Boot и каковы его основные особенности?
Вот несколько важных особенностей:
Q2. В чем разница между Spring и Spring Boot?
Spring Framework предоставляет несколько функций, которые упрощают разработку веб-приложений. Эти функции включают внедрение зависимостей, привязку данных, аспектно-ориентированное программирование, доступ к данным и многое другое.
По сути, в то время как Spring не пользуется особой популярностью, Spring Boot имеет самоуверенный взгляд на платформу и библиотеки, что позволяет нам быстро начать работу.
Вот два наиболее важных преимущества Spring Boot:
Пожалуйста, ознакомьтесь с одним из наших других руководств для подробного сравнения между vanilla Spring и Spring Boot.
Q3. Как мы можем настроить приложение Spring Boot с Maven?
Мы можем найти последнюю версию spring-boot-starter-parent на Maven Central.
Использовать стартовый родительский проект удобно, но не всегда возможно. Например, если наша компания требует, чтобы все проекты унаследовали от стандартного POM, мы все равно можем извлечь выгоду из управления зависимостями Spring Boot с использованием настраиваемого родителя.
Q4. Что такое Spring Initializr?
Мы можем перейти на сайт Spring Initializr, выбрать инструмент управления зависимостями (Maven или Gradle), язык (Java, Kotlin или Groovy), схему упаковки (Jar или War), версию и зависимости и загрузить проект.
Это создает для нас скелет проекта и экономит время на настройку, так что мы можем сосредоточиться на добавлении бизнес-логики.
Даже когда мы используем мастер новых проектов нашей IDE (например, STS или Eclipse с плагином STS) для создания проекта Spring Boot, он использует Spring Initializr под капотом.
Q5. Какие есть стартеры Spring Boot?
Каждый стартер играет роль универсального центра для всех необходимых нам технологий Spring. Затем транзитивно подключаются и управляются согласованным образом другие требуемые зависимости.
На момент написания этой статьи в нашем распоряжении более 50 стартеров. Чаще всего используются:
Полный список начинающих можно найти в этом репозитории.
Чтобы найти дополнительную информацию о стартерах Spring Boot, взгляните на Введение в Spring Boot Starters.
Q6. Как отключить определенную автоконфигурацию?
Если бы мы включили автоконфигурацию с аннотацией @SpringBootApplication, которая имеет @EnableAutoConfiguration в качестве метааннотации, мы могли бы отключить автоконфигурацию с помощью атрибута с тем же именем:
Q7. Как зарегистрировать пользовательскую автоконфигурацию?
To register an auto-configuration class, we must have its fully-qualified name listed under the EnableAutoConfiguration key in the META-INF/spring.factories file:
If we build a project with Maven, that file should be placed in the resources/META-INF directory, which will end up in the mentioned location during the package phase.
Q8. How to Tell an Auto-Configuration to Back Away When a Bean Exists?
To instruct an auto-configuration class to back off when a bean is already existent, we can use the @ConditionalOnMissingBean annotation. The most noticeable attributes of this annotation are:
When placed on a method adorned with @Bean, the target type defaults to the method’s return type:
Q9. How to Deploy Spring Boot Web Applications as Jar and War Files?
Traditionally, we package a web application as a WAR file, then deploy it into an external server. Doing this allows us to arrange multiple applications on the same server. During the time that CPU and memory were scarce, this was a great way to save resources.
However, things have changed. Computer hardware is fairly cheap now, and the attention has turned to server configuration. A small mistake in configuring the server during deployment may lead to catastrophic consequences.
Spring tackles this problem by providing a plugin, namely spring-boot-maven-plugin, to package a web application as an executable JAR. To include this plugin, just add a plugin element to pom.xml:
With this plugin in place, we’ll get a fat JAR after executing the package phase. This JAR contains all the necessary dependencies, including an embedded server. Thus, we no longer need to worry about configuring an external server.
We can then run the application just like we would an ordinary executable JAR.
Notice that the packaging element in the pom.xml file must be set to jar to build a JAR file:
If we don’t include this element, it also defaults to jar.
In case we want to build a WAR file, change the packaging element to war:
And leave the container dependency off the packaged file:
After executing the Maven package phase, we’ll have a deployable WAR file.
Q10. How to Use Spring Boot for Command Line Applications?
Just like any other Java program, a Spring Boot command line application must have a main method. This method serves as an entry point, which invokes the SpringApplication#run method to bootstrap the application:
The SpringApplication class then fires up a Spring container and auto-configures beans.
Notice we must pass a configuration class to the run method to work as the primary configuration source. By convention, this argument is the entry class itself.
After calling the run method, we can execute other statements as in a regular program.
Q11. What Are Possible Sources of External Configuration?
Spring Boot provides support for external configuration, allowing us to run the same application in various environments. We can use properties files, YAML files, environment variables, system properties, and command-line option arguments to specify configuration properties.
We can then gain access to those properties using the @Value annotation, a bound object via the @ConfigurationProperties annotation, or the Environment abstraction.
Q12. What Does it Mean that Spring Boot Supports Relaxed Binding?
Relaxed binding in Spring Boot is applicable to the type-safe binding of configuration properties.
With relaxed binding, the key of a property doesn’t need to be an exact match of a property name. Such an environment property can be written in camelCase, kebab-case, snake_case, or in uppercase with words separated by underscores.
For example, if a property in a bean class with the @ConfigurationProperties annotation is named myProp, it can be bound to any of these environment properties: myProp, my-prop, my_prop, or MY_PROP.
Q13. What is Spring Boot Devtools Used For?
Spring Boot Developer Tools, or DevTools, is a set of tools making the development process easier. To include these development-time features, we just need to add a dependency to the pom.xml file:
The spring-boot-devtools module is automatically disabled if the application runs in production. The repackaging of archives also excludes this module by default. Hence, it won’t bring any overhead to our final product.
By default, DevTools applies properties suitable to a development environment. These properties disable template caching, enable debug logging for the web group, and so on. As a result, we have this sensible development-time configuration without setting any properties.
Applications using DevTools restart whenever a file on the classpath changes. This is a very helpful feature in development, as it gives quick feedback for modifications.
By default, static resources, including view templates, don’t set off a restart. Instead, a resource change triggers a browser refresh. Notice this can only happen if the LiveReload extension is installed in the browser to interact with the embedded LiveReload server that DevTools contains.
For further information on this topic, please see Overview of Spring Boot DevTools.
Q14. How to Write Integration Tests?
When running integration tests for a Spring application, we must have an ApplicationContext.
To make our life easier, Spring Boot provides a special annotation for testing – @SpringBootTest. This annotation creates an ApplicationContext from configuration classes indicated by its classes attribute.
In case the classes attribute isn’t set, Spring Boot searches for the primary configuration class. The search starts from the package containing the test up until it finds a class annotated with @SpringBootApplication or @SpringBootConfiguration.
For detailed instructions, check out our tutorial on testing in Spring Boot.
Q15. What Is Spring Boot Actuator Used For?
Essentially, Actuator brings Spring Boot applications to life by enabling production-ready features. These features allow us to monitor and manage applications when they’re running in production.
Integrating Spring Boot Actuator into a project is very simple. All we need to do is to include the spring-boot-starter-actuator starter in the pom.xml file:
Spring Boot Actuator can expose operational information using either HTTP or JMX endpoints. Most applications go for HTTP, though, where the identity of an endpoint and the /actuator prefix form a URL path.
Here are some of the most common built-in endpoints Actuator provides:
Please refer to our Spring Boot Actuator tutorial for a detailed rundown.
Q16. Which Is a Better Way to Configure a Spring Boot Project – Using Properties or YAML?
YAML offers many advantages over properties files, such as:
However, writing it can be a little difficult and error-prone due to its indentation rules.
For details and working samples, please refer to our Spring YAML vs Properties tutorial.
Q17. What Are the Basic Annotations that Spring Boot Offers?
The primary annotations that Spring Boot offers reside in its org.springframework.boot.autoconfigure and its sub-packages. Here are a couple of basic ones:
Spring Boot Annotations offers more insight into the subject.
Q18. How Can You Change the Default Port in Spring Boot?
We can change the default port of a server embedded in Spring Boot using one of these ways:
Q19. Which Embedded Servers does Spring Boot Support, and How to Change the Default?
As of date, Spring MVC supports Tomcat, Jetty, and Undertow. Tomcat is the default application server supported by Spring Boot’s web starter.
Spring WebFlux supports Reactor Netty, Tomcat, Jetty, and Undertow with Reactor Netty as default.
In Spring MVC, to change the default, let’s say to Jetty, we need to exclude Tomcat and include Jetty in the dependencies:
Similarly, to change the default in WebFlux to UnderTow, we need to exclude Reactor Netty and include UnderTow in the dependencies.
“Comparing embedded servlet contains in Spring Boot” contains more details on the different embedded servers we can use with Spring MVC.
Q20. Why Do We Need Spring Profiles?
When developing applications for the enterprise, we typically deal with multiple environments such as Dev, QA, and Prod. The configuration properties for these environments are different.
For example, we might be using an embedded H2 database for Dev, but Prod could have the proprietary Oracle or DB2. Even if the DBMS is the same across environments, the URLs would definitely be different.
Spring Profiles дает исчерпывающий обзор этой темы.
3. Заключение
В этом руководстве были рассмотрены некоторые из наиболее важных вопросов по Spring Boot, с которыми вы можете столкнуться во время технического интервью. Мы надеемся, что они помогут вам найти работу своей мечты.