Перейти к основному содержимому

· 4 мин. чтения

1. Введение

Возможно, одним из наиболее важных принципов разработки современного программного обеспечения является внедрение зависимостей (DI), которое совершенно естественно вытекает из другого критически важного принципа: модульности.

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

Для начала нам нужно импортировать зависимость spring-context в наш pom.xml :

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>

Затем нам нужно настроить файл конфигурации . Этот файл может быть файлом POJO или XML, в зависимости от предпочтений.

· 8 мин. чтения

1. Обзор

JDK 5.0 представил Java Generics с целью уменьшить количество ошибок и добавить дополнительный уровень абстракции над типами.

Этот учебник представляет собой краткое введение в обобщения в Java, их цель и то, как они могут улучшить качество нашего кода.

2. Потребность в дженериках

· 2 мин. чтения

1. Обзор

Эта кулинарная книга иллюстрирует , как использовать проверку Mockito в различных случаях использования.

Формат кулинарной книги ориентирован на примеры и практичен — никаких лишних деталей и объяснений не требуется.

Мы будем издеваться над простой реализацией списка:

public class MyList extends AbstractList<String> {

@Override
public String get(final int index) {
return null;
}
@Override
public int size() {
return 0;
}
}

· 3 мин. чтения

1. Обзор

В этом руководстве будет обсуждаться функция, добавленная в Spring Boot 2.5, которая позволяет указывать префикс для переменных системной среды . Таким образом, мы можем запускать несколько разных приложений Spring Boot в одной и той же среде, поскольку все свойства будут ожидать версию с префиксом.

2. Префиксы переменных среды

Нам может понадобиться запустить несколько приложений Spring Boot в одной и той же среде, и мы часто сталкиваемся с проблемой присвоения имен переменных среды различным свойствам .

Мы могли бы использовать свойства Spring Boot , которые в некотором роде могут быть похожими, но мы также можем захотеть установить префикс на уровне приложения, чтобы использовать его на стороне среды.

· 8 мин. чтения

1. Обзор

В этом руководстве мы объясним, как использовать аннотацию @DomainEvents и класс AbstractAggregateRoot для удобной публикации и обработки доменных событий, создаваемых агрегатом — одним из ключевых тактических шаблонов проектирования в доменно-ориентированном проектировании.

Агрегаты принимают бизнес-команды, что обычно приводит к созданию события, связанного с бизнес-сферой, — события домена .

Если вы хотите узнать больше о DDD и агрегатах, лучше всего начать с оригинальной книги Эрика Эванса . Есть также отличная серия об эффективном дизайне заполнителей, написанная Воном Верноном. Определенно стоит прочитать.

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

2. Зависимости Maven

· 4 мин. чтения

1. Введение

В этом кратком руководстве мы рассмотрим поддержку внедрения зависимостей на уровне методов в Spring с помощью аннотации @Lookup .

2. Почему @Lookup ?

Метод, аннотированный @Lookup, сообщает Spring, чтобы он возвращал экземпляр возвращаемого типа метода, когда мы его вызываем.

По сути, Spring переопределит наш аннотированный метод и будет использовать возвращаемый тип и параметры нашего метода в качестве аргументов для BeanFactory#getBean.

· 10 мин. чтения

1. Введение

Guava предоставляет нам ListenableFuture с расширенным API по сравнению с Java Future по умолчанию. Давайте посмотрим, как мы можем использовать это в наших интересах.

2. Future , ListenableFuture и Futures

Давайте кратко рассмотрим, что представляют собой эти разные классы и как они связаны друг с другом.

2.1. Будущее

· 3 мин. чтения

1. Обзор

В Java 8 появилась концепция потоков S как эффективного способа выполнения массовых операций над данными. А параллельные потоки можно получить в средах, поддерживающих параллелизм.

Эти потоки могут иметь повышенную производительность за счет накладных расходов на многопоточность.

В этом кратком руководстве мы рассмотрим одно из самых больших ограничений Stream API и посмотрим, как заставить параллельный поток работать с пользовательским экземпляром ThreadPool , в качестве альтернативы — есть библиотека, которая обрабатывает это .

2. Параллельный поток

· 9 мин. чтения

1. Введение

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

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

2. Потоки в JVM

JVM использует потоки для выполнения каждой внутренней и внешней операции. Как мы знаем, процесс сборки мусора имеет свой собственный поток, но и задачи внутри Java-приложения создают свои собственные.

· 6 мин. чтения

1. Обзор

В этом руководстве мы подробно рассмотрим класс AtomicMarkableReference из пакета java.util.concurrent.atomic .

Далее мы рассмотрим методы API класса и увидим, как мы можем использовать класс AtomicMarkableReference на практике.

2. Цель

AtomicMarkableReference — это универсальный класс, который инкапсулирует как ссылку на объект , так и логический флаг. Эти два поля связаны друг с другом и могут обновляться атомарно , либо вместе, либо по отдельности .