|
Хочешь, хорошо работать пользуйся Спрингом. Хочешь, чтобы работало хорошо знай его кишки. Навигация
Spring Boot, Spring Data В НАЧАЛО ДОКУМЕНТА 1. Что такое Spring Boot?
| Spring Boot – это фреймворк, целью которого является упрощение создания приложения на основе Spring.
Ништяки:
1) Автоматическая конфигурация приложения. Теперь практически не нужно настраивать соединение с БД и MVC.
Spring Boot самостоятельно делает предварительную настройку Spring MVC за вас. Достаточно добавить зависимость spring-boot-starter-thymeleaf и не нужно настраивать VievResolver и SpringResourceTemplateResolver вручную. Всё делается по такому принципу. Небольшой список стартер пакетов.
2) Управление зависимостями в Maven проектах. Позволяет сократить количество зависимостей в pom.xml файле и избежать конфликтов версий (совместимости) этих зависимостей. Для этого используются starter пакеты. Spring Boot собирает все общие зависимости и определяет их в одном starter пакете, например spring-boot-starter-web.
3 ) Следующая боль, которая у нас была, Контекст — настройка контекста. Каждый раз, когда мы начинаем с нуля писать приложение, на то, чтобы настроить всю инфраструктуру, уходит куча времени. Мы прописывали либо в xml, либо в java config-ах (@Confoguration) очень много так называемых инфраструктурных бинов (@Bean). Если мы работали с hibernate, нам нужен был бин EntityManagerFactory. Много инфраструктурных бинов — и transaction manager, и data source, и т.п. — нужно было настраивать руками. Естественно, все они попадали в контекст. Вы спросите, а где теперь контекст если у нас нет его настроек? Контекст есть, и он находится в SpringApplication.run.
4) Встроенная поддержка сервера. Теперь не нужно скачивать TomCat и отдельно устанавливать его в проект, потому что в Spring Boot уже встроен сервер.
Читаем здесь!
| 2. На чём основан Spring Boot?
| П ри создании проекта основанного на Spring Boot, мы можем обратить внимание на родительскую зависимость в pom файле Maven. Это есть ответ на вопрос. Уже сейчас проект содержит набор настроек по умолчанию, возможности автоконфигурации, логирования и других сконфигурированных бинов.
| 3. Что содержит в себе spring boot starter? Можно ли создать свой Starter пакет?
| Всё удобство Spring Boot основано на использовании Starter пакетов, которые позволяют получить набор сконфигурированных бинов, готовых к использованию и доступных для конфигурации через properties-файлы.
Свой Starter пакет создать можно! Как это сделать, можно посмотреть тут!
| 4. Аннотация @Conditional, для чего она?
| Один стартер за раз, может подгрузить огромный набор сконфигурированных бинов (200 или 300 и т.д.). Поэтому может возникнуть ситуация, когда мы захотим убрать лишние, ненужные нам бины. Для этого используется аннотация @Conditional которая даёт возможность писать в свои аннотации conditions, которые ссылаются на классы, возвращающие true или false. В зависимости от этого сконфигурированные стартером бины, либо создаются, либо нет.
| 5. Что будет, если создать бин, который уже существует в starter пакете, например EntityManagerFactory?
| В большинстве сконфигурированных бинов, уже присутствует аннотация @ConditionalOnMissingBean которая позволяет без конфликтов, создать свой кастомный EntityManagerFactory. Точнее не создать, а экстендить его, а потом переопределить (@Override) и прописать нужный нам функционал.
Е сть и второй вариант. Можно просто создать @Bean с именем бина который уже был подгружен вместе со стартером. Таким образом бин из стартера перезапишется и будет использоваться наш, кастомный бин. И нам не нужно ничего экстендить и оверрайдить. Однако такой подход гарантирует проблемы в будущем. Например, при следующем обновлении SpringBoot есть небольшая вероятность что разработчики изменят имя того самого бина в стартере, который мы перезаписали своим. Что произойдёт? Правильно, будет конфликт нашего кастомного бина с бином оригинальным. Нам придётся искать в чём причина.
| 6. Проект Spring Data, что это? Какие в нём существуют модули?
| Spring Data — дополнительный удобный механизм для взаимодействия с сущностями базы данных, организации их в репозитории, извлечение данных, изменение, в каких-то случаях для этого будет достаточно объявить интерфейс и метод в нём, без имплементации.
Основный модули Spring Data (есть и другие): Spring Data Commons, Spring Data JPA, Spring Data KeyValue, Spring Data LDAP, Spring Data MongoDB, Spring Data Redis, Spring Data REST.
В Java EE стандартом для работы с базами данных является Spring Data JPA (Java Persistence API).
| 7. Какие репозитории существуют в Spring Data JPA? Spring Repository. Как оно устроенно?
| Это несколько интерфейсов которые используют JPA Entity для взаимодействия с БД и предоставляют набор готовых, реализованных методов для взаимодействия с БД.
1 ) Repository (родитель остальных интерфейсов),
2) CrudRepository,
3) PagingAndSortingRepository,
4) JpaRepository.
Первый тип переданный в дженерик — это класс-сущность, с которым должен работать данный репозиторий, второй дженерик— тип первичного ключа.
Все эти репозитории имеют свой стандартный набор методов для взаимодействия с БД. Но часто их бывает недостаточно. Для того чтобы нам, не реализовывать новые методы самостоятельно, разработчики предусмотрели возможность строить запросы к Entity (модели) прямо из имени метода. Для этого используется механизм префиксов find…By, read…By, query…By, count…By, и get…By, далее от префикса метода начинается разбор остальной части. Вводное предложение может содержать дополнительные выражения, например, Email или User. Далее первый By действует как разделитель, чтобы указать начало фактических критериев. Можно определить условия для свойств сущностей и объединить их с помощью And и Or.
Например, findByRole, getUserByEmail или findByFirstNameAndLastName.
| Дополнительные сборники вопросов и ответов на просторах веба В НАЧАЛО ДОКУМЕНТА
| https://tgraph.io/60-voprosov-ob-Java-i-Spring-kotorye-vy-dolzhny-znat-04-17-2
https://www.tutorialspoint.com/spring/spring_interview_questions.htm
https://habr.com/ru/post/471140/
https://habr.com/ru/post/470305/
https://habr.com/ru/post/350862/
https://www.tutorialspoint.com/spring/spring_interview_questions.htm
Как активно собеседовавшийся на java разработчика этой весной уровня junior-middle, могу вам сказать, что спрашивают отличия get от post запросов, просят перечислить известные методы запросов и сопоставить их с crud операциями, спрашивают почему сопоставили именно так и можно ли использовать методы по-другому, просят рассказать про различия rest и soap (вопрос с подвохом, категорически рекомендую понять что это за сущности такие вообще, тогда ответите легко), является ли http stateless и как вы это понимаете. Будут и прикладные вопросы на знание Java Core, такие как типы стримов, отличие map от flatmap, что такое hashmap, какие есть методы у object, взаимосвязь equals с hashcode и функциональное программирование в Java.
Р екомендации для изучения от Фёдора.
| |
|
|