Сообщения

Сообщения за февраль, 2020

Использование аннотации @SpringBootApplication

Изображение
Многим разработчикам Spring Boot нравится, когда их приложения используют автоконфигурацию, сканирование компонентов и могут определять дополнительную конфигурацию в своем "application class". Одну аннотацию @SpringBootApplication можно использовать для включения этих трех функций, а именно: @EnableAutoConfiguration: включить механизм автоконфигурации Spring Boot @ComponentScan: включить сканирование @Component для пакета, в котором находится приложение @Configuration: позволяет регистрировать дополнительные компоненты (beans) в контексте или импортировать дополнительные классы конфигурации package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; // то же самое что и // @Configuration @EnableAutoConfiguration @ComponentScan @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class,

Spring Beans и внедрение зависимостей

Изображение
Вы можете использовать любой из стандартных методов Spring Framework для определения ваших bean-компонентов и их внедренных зависимостей. Часто простое использование @ComponentScan (чтобы найти ваши bean-компоненты) и использование @Autowired (для внедрения в конструктор) работает хорошо. Если вы структурируете свой код, как предложено ранее (поместив класс приложения в корневой пакет), вы можете добавить @ComponentScan без каких-либо аргументов. Все компоненты вашего приложения (@Component, @Service, @Repository, @Controller и т. д.) автоматически регистрируются как Spring Beans. В следующем примере показан Bean @Service, который использует внедрение в конструкторе для получения требуемого bean RiskAssessor: package com.example.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; @Autowire

Автоконфигурация в Spring Boot

Изображение
Автоматическая настройка Spring Boot пытается автоматически настроить приложение Spring на основе добавленных вами зависимостей jar. Например, если HSQLDB находится в вашем пути к классам (classpath), и вы не настроили вручную никаких компонентов соединения с базой данных, то Spring Boot автоматически конфигурирует базу данных в памяти. Если Вам необходимо включить автоматическую настройку, добавьте аннотации @EnableAutoConfiguration или @SpringBootApplication к одному из ваших классов @Configuration. Вам следует добавлять только одну аннотацию @SpringBootApplication или @EnableAutoConfiguration. Как правило, рекомендуется добавлять один или другой только в ваш основной класс @Configuration. Постепенная замена авто-конфигурации Автоконфигурация неинвазивна. В любой момент вы можете начать определять свою собственную конфигурацию для замены определенных частей автоконфигурации. Например, если вы добавите свой собственный DataSource bean, поддержка встроенной базы данных по умолчанию

Классы конфигурации Spring Boot

Изображение
Spring Boot поддерживает конфигурацию на основе Java. Хотя SpringApplication можно использовать с источниками XML, обычно рекомендуется, чтобы вашим основным источником был один класс @Configuration. Обычно класс, который определяет main метод, является хорошим кандидатом в качестве основного @Configuration. Многие примеры конфигурации Spring были опубликованы в Интернете с использованием конфигурации XML. Если возможно, всегда старайтесь использовать эквивалентную конфигурацию на основе Java. Поиск аннотаций Enable* может быть хорошей отправной точкой. Импорт дополнительных классов конфигурации Вам не нужно помещать все свои @Configuration в один класс. Аннотация @Import может использоваться для импорта дополнительных классов конфигурации. Кроме того, вы можете использовать @ComponentScan для автоматического подбора всех компонентов Spring, включая классы @Configuration. Импорт конфигурации XML Если вам абсолютно необходимо использовать конфигурацию на основе XML, рекомендуется н

Структурирование кода при использовании Spring Boot

Изображение
Spring Boot не требует какой-либо конкретной компоновки кода для работы. Тем не менее, есть некоторые лучшие практики, которые помогают. Использование “default” пакета Когда класс не включает объявление пакета, он считается находящимся в “default package”. Использование “default package”, как правило, не рекомендуется, и его следует избегать. Это может вызвать особые проблемы для приложений Spring Boot, которые используют аннотации @ComponentScan, @ConfigurationPropertiesScan, @EntityScan или @SpringBootApplication, поскольку каждый класс из каждого jar читается. Рекомендуется следовать Java-соглашениям об именах пакетов и использовать обратное доменное имя (например, com.example.project). Нахождение основного класса приложения Как правило, рекомендуется размещать основной класс приложения в корневом каталоге над другими классами. Аннотация @SpringBootApplication часто размещается в вашем основном классе и неявно определяет базовый “search package” для определенных элементов. Напр

Spring Boot стартеры

Изображение
Стартеры - это набор удобных дескрипторов зависимостей, которые вы можете включить в свое приложение. Вы получаете универсальный набор для всех необходимых вам Spring и связанных с ними технологий без необходимости искать примеры кода и копировать и вставлять множество дескрипторов зависимостей. Например, если вы хотите начать использовать Spring и JPA для доступа к базе данных, включите в ваш проект зависимость spring-boot-starter-data-jpa. Стартеры содержат множество зависимостей, которые необходимы вам для быстрого запуска и запуска проекта с согласованным, поддерживаемым набором управляемых переходных зависимостей. Что указывается в имени стартера Все официальные стартеры следуют аналогичной схеме именования; spring-boot-starter-*, где * это конкретный тип приложения. Эта структура наименования предназначена, чтобы помочь, когда вам нужно найти стартер. Интеграция Maven во многие IDE позволяет вам искать зависимости по имени. Например, если установлен соответствующий плагин Ecl

Системы сборки и Spring Boot: использование Maven

Изображение
При использовании Spring Boot настоятельно рекомендуется выбрать систему сборки, которая поддерживает управление зависимостями и может использовать артефакты, опубликованные в репозитории "Maven Central". Рекомендуется выбрать Maven или Gradle. Можно заставить Spring Boot работать с другими системами сборки (например, Ant), но они не особенно хорошо поддерживаются. Управление зависимостями Каждый релиз Spring Boot предоставляет курируемый список зависимостей, который он поддерживает. На практике вам не нужно предоставлять версию для какой-либо из этих зависимостей в конфигурации сборки, поскольку Spring Boot управляет этим для вас. При обновлении самого Spring Boot эти зависимости также обновляются согласованным образом. Вы по-прежнему можете указать версию и переопределить рекомендации Spring Boot, если это необходимо. Курируемый список содержит все модули Spring, которые вы можете использовать с Spring Boot, а также улучшенный список сторонних библиотек. Список доступен

Класс Optional в Java

Изображение
Класс Optional<T> это контейнерный объект, который может содержать или не содержать ненулевое значение. Если значение присутствует, isPresent() вернет true, а get() вернет значение. Предоставляются дополнительные методы, которые зависят от наличия или отсутствия содержащегося в нем значения, например orElse() (возвращает значение по умолчанию, если значение отсутствует) и ifPresent() (выполняет блок кода, если значение присутствует). Это основанный на значении класс; использование чувствительных к идентичности операций (включая равенство ссылок (==), хэш-код идентичность, синхронизацию) в экземплярах Optional может привести к непредсказуемым результатам и этого следует избегать. Optional был введен в Java 8, чтобы избавиться от исключений NullPointerException. По сути, Optional - это класс-оболочка, который содержит ссылку на какой-то другой объект. В этом контексте объект - это просто указатель на область памяти, и он также может указывать на ничто. Optional был введен, чтоб

Разработка вашего первого Spring Boot приложения

Изображение
В этом посте описывается, как разработать простое "Hello World!" веб-приложение, которое выделяет некоторые ключевые функции Spring Boot. Мы используем Maven для создания этого проекта, так как большинство IDE поддерживают его. Вы можете сократить действия, описанные ниже, перейдя в start.spring.io и выбрав "Web" стартер из поисковика зависимостей. Это создает новую структуру проекта, так что вы можете сразу начать писать код. Прежде чем мы начнем, откройте терминал и выполните следующие команды, чтобы убедиться, что у вас установлены валидные версии Java и Maven: $ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) $ mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00) Maven home: /usr/local/Cellar/maven/3.3.9/libexec Java version: 1.8.0_102, vendor: Oracle Corporation Этот пример должен быть создан

Обновление с более ранней версии Spring Boot

Изображение
Если вы обновляете версию 1.x Spring Boot, ознакомьтесь с "руководством по миграции" в вики проекта, в котором содержатся подробные инструкции по обновлению. Проверьте также "Примечания к релизу" для получения списка "новых и заслуживающих внимания" функций для каждого релиза. При обновлении до новой версии функции некоторые свойства могут быть переименованы или удалены. Spring Boot позволяет анализировать среду вашего приложения и печатать диагностику при запуске, а также временно переносить свойства во время выполнения. Чтобы включить эту функцию, добавьте следующую зависимость в ваш проект: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> <scope>runtime</scope> </dependency> Свойства, которые добавляются поздно в среду, например, при использовании @PropertySource, не будут приняты во внимание. После завершения миграции об

Установка Spring Boot CLI

Изображение
Spring Boot CLI (интерфейс командной строки) - это инструмент командной строки, который можно использовать для быстрого создания прототипа с помощью Spring. Это позволяет запускать скрипты Groovy, что означает, что у вас есть знакомый Java-подобный синтаксис без такого большого количества стандартного кода. Вам не нужно использовать интерфейс командной строки для работы с Spring Boot, но это, безусловно, самый быстрый способ получить приложение Spring с нуля. Ручная установка Вы можете скачать дистрибутив Spring CLI из репозитория программного обеспечения Spring. После загрузки следуйте инструкциям INSTALL.txt из распакованного архива. Итак, есть скрипт Spring (spring.bat для Windows) в каталоге bin/ в файле .zip. В качестве альтернативы, вы можете использовать java -jar с файлом .jar (скрипт поможет вам убедиться, что путь к классу установлен правильно). Установка с помощью SDKMAN! SDKMAN! (Диспетчер комплекта разработки программного обеспечения) можно использовать для управлен

Установка Spring Boot: Gradle

Изображение
Spring Boot 2.2.4 совместим с Gradle версий 5.x и 6.x. 4.10 также поддерживается, но эта поддержка устарела и будет удалена в следующем выпуске. Если у вас еще не установлен Gradle, вы можете следовать инструкциям на gradle.org. Зависимости Spring Boot могут быть объявлены с помощью группы org.springframework.boot. Как правило, ваш проект объявляет зависимости одному или нескольким "Starters". Spring Boot предоставляет полезный плагин Gradle, который можно использовать для упрощения объявлений зависимостей и создания исполняемых jar-файлов. Gradle Wrapper Gradle Wrapper предоставляет хороший способ "получить" Gradle, когда вам нужно собрать проект. Это небольшой скрипт и библиотека, которые вы фиксируете вместе со своим кодом для начальной загрузки процесса сборки. Читайте также: Spring Boot: особенности, системные требования Установка Spring Boot: Maven

Установка Spring Boot: Maven

Изображение
Spring Boot можно использовать с "классическими" инструментами разработки Java или установить в качестве инструмента командной строки. В любом случае вам нужен Java SDK v1.8 или выше. Прежде чем начать, вы должны проверить текущую установку Java с помощью следующей команды: $ java -version Вы можете использовать Spring Boot так же, как и любую стандартную библиотеку Java. Для этого включите соответствующие файлы spring-boot-*.jar в ваш classpath. Spring Boot не требует каких-либо специальных инструментов интеграции, поэтому вы можете использовать любую IDE или текстовый редактор. Кроме того, в приложении Spring Boot нет ничего особенного, поэтому вы можете запускать и отлаживать приложение Spring Boot, как и любую другую программу Java. Хотя вы можете копировать jar-файлы Spring Boot, обычно рекомендуется использовать инструмент сборки, который поддерживает управление зависимостями (например, Maven или Gradle). Maven установка Spring Boot совместим с Apache Maven 3.

Spring Boot: особенности, системные требования

Изображение
Spring Boot позволяет легко создавать автономные, готовые к продакшн среде приложения основанные на Spring. Spring Boot позволяет начать работу с минимальными усилиями. Большинству приложений Spring Boot требуется очень небольшая конфигурация Spring. Вы можете использовать Spring Boot для создания Java приложений, которые могут быть запущены с помощью java -jar или более традиционных war развертываний. Также предоставляется инструмент командной строки, который запускает "spring скрипты". Отличительные особенности Spring Boot: Обеспечивает радикально более быстрый и широко доступный стартовый опыт для всей разработки Spring. Предоставляет стандартную настройку "из коробки", но может быть быстро изменен, когда требования начинают отличаться от значений по умолчанию. Предоставляет ряд нефункциональных возможностей, которые являются общими для крупных классов проектов (такие как встроенные серверы, безопасность, метрики, проверки работоспособности и внешняя конф

Паттерн делегирования (Delegation) в Java

Изображение
Паттерн делегирования (Delegation) является поведенческим (behavioral) паттерном проектрования. Это техника, в которой объект выражает определенное поведение снаружи, но в реальности делегирует ответственность за реализацию этого поведения связанному объекту. Паттерн делегирования обеспечивает механизм отвлечения от реализации и контроля желаемого действия. Класс, вызываемый для выполнения действия, не выполняет его, а фактически делегирует вспомогательному классу. Потребитель не имеет или не требует знания фактического класса, выполняющего действие, только контейнера, к которому производится вызов. Используйте шаблон делегата для достижения следующего: Уменьшение связанности методов с их классом Работы компонентов, которые ведут себя одинаково, но предполагается, что эта ситуация может измениться в будущем. Пример использования паттерна делегирования на Java Предположим у нас есть автомобиль - интерфейс Car, имеющий метод ride: package example; public interface Car {

Паттерн Наблюдатель (Observer) в Java

Изображение
Паттерн Наблюдатель (Observer) относится к поведенческим (behavioral) паттернам проектирования. Основная цель данного паттерна это определение зависимости один-ко-многим между объектами, чтобы при изменении состояния объекта, все зависимые от него объекты получали уведомление и обновлялись автоматически. Используйте паттерн Наблюдатель (Observer) в любой из следующих ситуаций: когда абстракция имеет два аспекта, один зависит от другого. Инкапсуляция этих аспектов в отдельных объектах позволяет варьировать и повторно использовать их независимо. когда изменение одного объекта требует изменения других, и вы не знаете, сколько объектов нужно изменить когда объект должен иметь возможность уведомлять другие объекты, не делая предположений о том, кто эти объекты. Другими словами, вы не хотите, чтобы эти объекты были тесно связаны. Типичный вариант использования: изменение в одном объекте приводит к изменению в других объектах. Пример использования паттерна Наблюдатель на Java Предп

Повышение производительности Java Hotspot VM: escape анализ

Изображение
Escape анализ - это метод, с помощью которого Java HotSpot Server Compiler может анализировать область использования нового объекта и решать, следует ли размещать объект в куче Java. Escape анализ поддерживается и включается по умолчанию в Java SE 6u23 и более поздних версиях. Escape состояние объекта, основанное на escape анализе, может быть одним из следующих состояний: GlobalEscape: объект экранирует метод и поток. Например, объект хранится в статическом поле, хранится в поле экранированного объекта или возвращается как результат текущего метода. ArgEscape: объект передается в качестве аргумента или на него ссылается аргумент, но он не экранируется глобально во время вызова. Это состояние определяется путем анализа байт-кода вызываемого метода. NoEscape: объект является скалярным заменяемым объектом, что означает, что его размещение может быть удалено из сгенерированного кода. После escape анализа серверный компилятор исключает скалярные заменяемые выделения объектов и связ