ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.12.2023
Просмотров: 463
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Что такое SpringBoot? Какие у него преимущества? Как конфигурируется?
Подробно
Spring Boot – это модуль Spring-а, который предоставляет функцию RAD для среды Spring
(Rapid Application Development – быстрая разработка приложений). Он обеспечивает более простой и быстрый способ настройки и запуска как обычных, так и веб-приложений. Он просматривает пути к классам и настроенные бины, делает разумные предположения о том,
чего не хватает, и добавляет эти элементы.
Ключевые особенности и преимущества Spring Boot:
1. Простота управления зависимостями (spring-boot-starter-* в pom.xml).
Чтобы ускорить процесс управления зависимостями Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику в виде так называемых starter-пакетов.
Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в приложение. Это позволяет получить универсальное решение для всех технологий, связанных со Spring, избавляя программиста от лишнего поиска необходимых зависимостей, библиотек и решения вопросов, связанных с конфликтом версий различных библиотек.
Например, если необходимо начать использовать Spring Data JPA для доступа к базе данных, можно просто включить в проект зависимость spring-boot-starter-data-jpa.
Starter-пакеты можно создавать и свои.
2. Автоматическая конфигурация.
Автоматическая конфигурация включается аннотацией @EnableAutoConfiguration (входит в состав аннотации @SpringBootApplication).
После выбора необходимых для приложения starter-пакетов Spring Boot попытается автоматически настроить Spring-приложение на основе выбранных jar-зависимостей,
доступных в classpath классов, свойств в application.properties и т. п. Например, если добавим springboot-starter-web, то Spring boot автоматически сконфигурирует такие бины, как
DispatcherServlet, ResourceHandlers, MessageSource и т. д.
Автоматическая конфигурация работает в последнюю очередь после регистрации пользовательских бинов и всегда отдает им приоритет. Если код уже зарегистрировал бин
DataSource, автоконфигурация не будет его переопределять.
3. Встроенная поддержка сервера приложений/контейнера сервлетов (Tomcat, Jetty).
Каждое Spring Boot web-приложение включает встроенный web-сервер. Не нужно беспокоиться о настройке контейнера сервлетов и развертывания приложения в нем. Теперь приложение может запускаться само как исполняемый .jar-файл с использованием встроенного сервера.
4. Готовые к работе функции, такие как метрики, проверки работоспособности, security и внешняя конфигурация.
5. Инструмент CLI (command-line interface) для разработки и тестирования приложения
Spring Boot.
6. Минимизация boilerplate кода (код, который должен быть включен во многих местах практически без изменений), конфигурации XML и аннотаций.
Как происходит автоконфигурация в Spring Boot:
1. Отмечаем main-класс аннотацией
@SpringBootApplication
(аннотация инкапсулирует в себя:
@SpringBootConfiguration, @ComponentScan,
@EnableAutoConfiguration), таким образом наличие @SpringBootApplication включает сканирование компонентов, автоконфигурацию и показывает разным компонентам Spring (например, интеграционным тестам), что это приложение Spring
Boot.
2. @EnableAutoConfiguration импортирует класс EnableAutoConfigurationImportSelector.
Этот класс не объявляет бины сам, а использует фабрики.
3. Класс EnableAutoConfigurationImportSelector импортирует ВСЕ (более 150)
перечисленные в META-INF/spring.factories конфигурации, чтобы предоставить нужные бины в контекст приложения.
4. Каждая из этих конфигураций пытается сконфигурировать различные аспекты приложения (web, JPA, AMQP и т. д.), регистрируя нужные бины. Логика при регистрации бинов управляется набором @ConditionalOn* аннотаций. Можно указать,
чтобы бин создавался при наличии класса в classpath (@ConditionalOnClass), наличии существующего бина
(@ConditionalOnBean),
отсутствии бина
(@ConditionalOnMissingBean) и т. п. Таким образом, наличие конфигурации не значит,
что бин будет создан и зачастую конфигурация ничего делать и создавать не будет.
5. Созданный в итоге AnnotationConfigEmbeddedWebApplicationContext ищет в том же
DI- контейнере фабрику для запуска embedded servlet container.
6. Servlet container запускается, приложение готово к работе.
Расскажите про нововведения Spring 5
•
используется JDK 8+ (Optional, CompletableFuture, Time API, java.util.function, default methods);
•
поддержка Java 9 (Automatic-Module-Name in 5.0, module-info in 6.0+, ASM 6);
•
поддержка HTTP/2 (TLS, Push), NIO/NIO.2;
•
поддержка Kotlin;
•
реактивность (веб-инфраструктура с реактивным стеком, «Spring WebFlux»);
•
Null-safety аннотации(@Nullable), новая документация;
•
совместимость с Java EE 8 (Servlet 4.0, Bean Validation 2.0, JPA 2.2, JSON Binding API
1.0);
•
поддержка JUnit 5 + Testing Improvements (conditional and concurrent);
•
удалена поддержка Portlet, Velocity, JasperReports, XMLBeans, JDO, Guava.
Паттерны
Что такое «шаблон проектирования»?
Проверенное и готовое к использованию логическое решение, которое может быть реализовано по-разному в разных языках программирования.
Плюсы:
•
снижение сложности разработки за счет готовых абстракций;
•
облегчение коммуникации между разработчиками.
Минусы:
•
слепое следование некоторому шаблону может привести к усложнению программы;
•
желание попробовать некоторый шаблон в деле без особых на то оснований.
Назовите основные характеристики шаблонов
•
имя – все шаблоны имеют уникальное имя, служащее для их идентификации;
•
назначение данного шаблона;
•
задача, которую шаблон позволяет решить;
•
способ решения, предлагаемый в шаблоне для решения задачи в том контексте, где этот шаблон был найден;
•
участники – сущности, принимающие участие в решении задачи;
•
следствия от использования шаблона как результат действий, выполняемых в шаблоне;
•
реализация – возможный вариант реализации шаблона.
Назовите три основные группы паттернов
Порождающие – отвечают за удобное и безопасное создание новых объектов или даже целых семейств объектов без внесения в программу лишних зависимостей.
Структурные – отвечают за построение удобных в поддержке иерархий классов.
Поведенческие – заботятся об эффективной коммуникации между объектами.
Основные – основные строительные блоки, используемые для построения других шаблонов. Например, интерфейс.
Расскажите про паттерн «Одиночка» (Singleton)
Порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Конструктор помечается как private, а для создания нового объекта Singleton использует специальный метод getInstance(). Он либо создает объект, либо отдаёе существующий объект, если он уже был создан.
private static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
Плюсы:
•
можно не создавать множество объектов для ресурсоемких задач, а пользоваться одним.
Минусы:
•
нарушает принцип единой ответственности, так как его могут использовать множество объектов.
Почему считается антипаттерном?
•
нельзя тестировать с помощью mock, но можно использовать powerMock;
•
нарушает принцип единой ответственности;
•
нарушает Open/Close принцип, его нельзя расширить.
Можно ли его синхронизировать без synchronized у метода?
1. Можно сделать его Enum (eager). Это статический final класс с константами. JVM
загружает final и static классы на этапе компиляции, а значит несколько потоков не могут создать несколько инстансов.
2. C помощью double checked locking (lazy). Synchronized внутри метода:
private static volatile Singleton instance;
public static Singleton getInstance() {
Singleton localInstance = instance;
if (localInstance == null) { // first check
synchronized (Singleton.class) {
localInstance = instance;
if (localInstance == null) { // second check
instance = localInstance = new Singleton();
}
}
}
return localInstance;
}
Расскажите про паттерн «Строитель» (Builder)
Порождающий паттерн, который позволяет создавать сложные объекты пошагово.
Строитель дает возможность использовать один и тот же код для получения разных представлений одного объекта.
Паттерн предлагает вынести конструирование объекта за пределы его собственного класса,
поручив это дело отдельным объектам, называемым строителями.
Процесс конструирования объекта разбит на отдельные шаги (например, построитьСтены,
вставитьДвери). Чтобы создать объект, нужно поочередно вызывать методы строителя.
Причем не нужно запускать все шаги, а только те, что нужны для производства объекта определенной конфигурации.
Можно пойти дальше и выделить вызовы методов строителя в отдельный класс,
называемый Директором. В этом случае Директор будет задавать порядок шагов строительства, а строитель – выполнять их.
Плюсы:
•
позволяет использовать один и тот же код для создания различных объектов;
•
изолирует сложный код сборки объектов от его основной бизнес-логики.
Минусы:
•
усложняет код программы из-за введения дополнительных классов.
Расскажите про паттерн «Фабричный метод» (Factory Method)
Порождающий шаблон проектирования, в котором подклассы имплементируют общий интерфейс с методом для создания объектов. Переопределенный метод в каждом наследнике возвращает нужный вариант объекта.
Объекты все равно будут создаваться при помощи new, но делать это будет фабричный метод. Таким образом можно переопределить фабричный метод в подклассе, чтобы изменить тип создаваемого продукта.
Чтобы эта система заработала, все возвращаемые объекты должны иметь общий интерфейс. Подклассы смогут производить объекты различных классов, следующих одному и тому же интерфейсу.
Плюсы:
•
выделяет код производства объектов в одно место, упрощая поддержку кода;
•
реализует принцип открытости/закрытости.
Минусы:
•
может привести к созданию больших параллельных иерархий классов, так как для каждого класса продукта надо создать свой подкласс создателя.
Пример: SessionFactory в Hibernate.
Расскажите про паттерн «Абстрактная фабрика» (Abstract Factory)
Порождающий паттерн проектирования, который представляет собой интерфейс для создания других классов, не привязываясь к конкретным классам создаваемых объектов.
Абстрактная фабрика предлагает выделить общие интерфейсы для отдельных продуктов,
составляющих семейства. Так, все вариации кресел получат общий интерфейс Кресло, все диваны реализуют интерфейс Диван и так далее.
Далее создается абстрактная фабрика – общий интерфейс, который содержит фабричные методы создания всех продуктов семейства (например, создатьКресло, создатьДиван и создатьСтолик). Эти операции должны возвращать абстрактные типы продуктов,
представленные интерфейсами, которые выделили ранее – Кресла, Диваны и Столики.
Плюсы:
•
гарантированно будет создаваться тип одного семейства.
Минусы:
•
усложняет код программы из-за введения множества дополнительных классов.
Расскажите про паттерн «Прототип» (Prototype)
Порождающий паттерн проектирования, который позволяет копировать объекты, не вдаваясь в подробности их реализации.
Паттерн поручает создание копий самим копируемым объектам. Он вводит общий интерфейс с методом clone для всех объектов, поддерживающих клонирование. Реализация этого метода в разных классах очень схожа. Метод создает новый объект текущего класса и копирует в него значения всех полей собственного объекта.
Плюсы:
•
позволяет клонировать объекты, не привязываясь к их конкретным классам.
Минусы:
•
сложно клонировать составные объекты, имеющие ссылки на другие объекты.
Расскажите про паттерн «Адаптер» (Adapter)
Структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Это объект-переводчик, который трансформирует интерфейс или данные одного объекта в такой вид, чтобы он стал понятен другому объекту.
При этом адаптер оборачивает один из объектов так, что другой объект даже не знает о наличии первого.
Плюсы:
•
отделяет и скрывает от клиента подробности преобразования различных интерфейсов.
Минусы:
•
усложняет код программы из-за введения дополнительных классов.
Расскажите про паттерн «Декоратор» (Decorator)
Структурный паттерн проектирования, который позволяет добавлять объектам новую функциональность, оборачивая их в полезные «обертки».
Целевой объект помещается в другой объект-обертку, который запускает базовое поведение обернутого объекта, а затем добавляет к результату что-то свое.
Оба объекта имеют общий интерфейс, поэтому для пользователя нет никакой разницы, с каким объектом работать – чистым или обернутым. Можно использовать несколько разных оберток одновременно – результат будет иметь объединенное поведение всех оберток сразу.
Адаптер не меняет состояния объекта, а декоратор может менять.
Плюсы:
•
большая гибкость, чем у наследования.
Минусы:
•
труднее конфигурировать многократно обернутые объекты.
Расскажите про паттерн «Заместитель» (Proxy)
Структурный паттерн проектирования, который позволяет подставлять вместо реальных объектов специальные объекты-заменители, которые перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу.
Заместитель предлагает создать новый класс-дублер, имеющий тот же интерфейс, что и оригинальный служебный объект. При получении запроса от клиента объект-заместитель сам бы создавал экземпляр служебного объекта, выполняя промежуточную логику, которая выполнялась бы до (или после) вызовов этих же методов в настоящем объекте.
Плюсы:
•
позволяет контролировать сервисный объект незаметно для клиента.
Минусы:
•
увеличивает время отклика от сервиса.
Расскажите про паттерн «Итератор» (Iterator)
Поведенческий паттерн проектирования, который дает возможность последовательно обходить элементы составных объектов, не раскрывая их внутреннего представления.
Идея состоит в том, чтобы вынести поведение обхода коллекции из самой коллекции в отдельный класс.
Детали: создается итератор и интерфейс, который возвращает итератор. В классе, в котором надо будет вызывать итератор, имплементируем интерфейс, возвращающий итератор, а сам итератор делаем там нестатическим вложенным классом, так как он нигде использоваться больше не будет.
1 ... 17 18 19 20 21 22 23 24 25
Расскажите про паттерн «Шаблонный метод» (Template Method)
Поведенческий паттерн проектирования, который пошагово определяет алгоритм и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
Паттерн предлагает разбить алгоритм на последовательность шагов, описать эти шаги в отдельных методах и вызывать их в одном шаблонном методе друг за другом. Для описания шагов используется абстрактный класс. Общие шаги можно будет описать прямо в абстрактном классе. Это позволит подклассам переопределять некоторые шаги алгоритма,
Поведенческий паттерн проектирования, который пошагово определяет алгоритм и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
Паттерн предлагает разбить алгоритм на последовательность шагов, описать эти шаги в отдельных методах и вызывать их в одном шаблонном методе друг за другом. Для описания шагов используется абстрактный класс. Общие шаги можно будет описать прямо в абстрактном классе. Это позволит подклассам переопределять некоторые шаги алгоритма,
оставляя без изменений его структуру и остальные шаги, которые для этого подкласса не так важны.
Расскажите про паттерн «Цепочка обязанностей» (Chain of Responsibility)
Поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке обработчиков. Каждый обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
Базируется на том, чтобы превратить каждую проверку в отдельный класс с единственным методом выполнения. Данные запроса, над которым происходит проверка, будут передаваться в метод как аргументы.
Каждый из методов будет иметь ссылку на следующий метод-обработчик, что образует цепь.
Таким образом, при получении запроса обработчик сможет не только сам что-то с ним сделать, но и передать обработку следующему объекту в цепочке. Может и не передавать,
если проверка в одном из методов не прошла.
Какие паттерны используются в Spring Framework?
•
Singleton – Bean scopes;
•
Factory – Bean Factory classes;
•
Prototype – Bean scopes;
•
Adapter – Spring Web and Spring MVC;
•
Proxy – Spring Aspect Oriented Programming support;
•
Template Method – JdbcTemplate, HibernateTemplate etc;
•
Front Controller – Spring MVC DispatcherServlet;
•
DAO – Spring Data Access Object support;
•
Dependency Injection.
Какие паттерны используются в Hibernate?
•
Domain Model – объектная модель предметной области, включающая в себя как поведение, так и данные;
•
Data Mapper – слой мапперов (Mappers), который передает данные между объектами и базой данных, сохраняя их независимыми друг от друга и себя;
•
Proxy – применяется для ленивой загрузки;
•
Factory – используется в SessionFactory.
Шаблоны GRASP: Low Coupling (низкая связанность) и High Cohesion
(высокая сплоченность)
Low Coupling – части системы, которые изменяются вместе, должны находиться близко друг к другу.
High Cohesion – если возвести Low Coupling в абсолют, то можно прийти к тому, чтобы разместить всю функциональность в одном единственном классе. В таком случае связей не будет вообще, но в этот класс попадет совершенно несвязанная между собой бизнес-логика.
Расскажите про паттерн «Цепочка обязанностей» (Chain of Responsibility)
Поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке обработчиков. Каждый обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
Базируется на том, чтобы превратить каждую проверку в отдельный класс с единственным методом выполнения. Данные запроса, над которым происходит проверка, будут передаваться в метод как аргументы.
Каждый из методов будет иметь ссылку на следующий метод-обработчик, что образует цепь.
Таким образом, при получении запроса обработчик сможет не только сам что-то с ним сделать, но и передать обработку следующему объекту в цепочке. Может и не передавать,
если проверка в одном из методов не прошла.
Какие паттерны используются в Spring Framework?
•
Singleton – Bean scopes;
•
Factory – Bean Factory classes;
•
Prototype – Bean scopes;
•
Adapter – Spring Web and Spring MVC;
•
Proxy – Spring Aspect Oriented Programming support;
•
Template Method – JdbcTemplate, HibernateTemplate etc;
•
Front Controller – Spring MVC DispatcherServlet;
•
DAO – Spring Data Access Object support;
•
Dependency Injection.
Какие паттерны используются в Hibernate?
•
Domain Model – объектная модель предметной области, включающая в себя как поведение, так и данные;
•
Data Mapper – слой мапперов (Mappers), который передает данные между объектами и базой данных, сохраняя их независимыми друг от друга и себя;
•
Proxy – применяется для ленивой загрузки;
•
Factory – используется в SessionFactory.
Шаблоны GRASP: Low Coupling (низкая связанность) и High Cohesion
(высокая сплоченность)
Low Coupling – части системы, которые изменяются вместе, должны находиться близко друг к другу.
High Cohesion – если возвести Low Coupling в абсолют, то можно прийти к тому, чтобы разместить всю функциональность в одном единственном классе. В таком случае связей не будет вообще, но в этот класс попадет совершенно несвязанная между собой бизнес-логика.