Java библиотека – Telegram
Java библиотека
31.5K subscribers
2.38K photos
91 videos
10 files
2.19K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Что такое BeanPostProcessor в Spring?

BeanPostProcessor — это интерфейс из Spring Framework, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring контейнере. Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина:

🟡 postProcessBeforeInitialization(Object bean, String beanName) - вызывается до того, как бин будет инициализирован (до вызова метода @PostConstruct или InitializingBean#afterPropertiesSet).
🟡 postProcessAfterInitialization(Object bean, String beanName) - вызывается после инициализации бина (после завершения всех инициализационных методов).

Зачем нужен BeanPostProcessor?

Он используется для дополнительной обработки и кастомизации бинов после их создания, но до передачи клиентскому коду. Примеры:

- Добавление проксирования бинов (например, для AOP или транзакций).
- Валидация или изменение свойств бинов.
- Логирование жизненного цикла.
- Добавление кастомных аннотаций.
- Обработка маркерных интерфейсов.

Как это работает?

1️⃣ Spring сканирует контекст на наличие бинов, реализующих интерфейс BeanPostProcessor.
2️⃣ Если такие бины найдены, они применяются ко всем бинам в приложении.
3️⃣ Методы postProcessBeforeInitialization и postProcessAfterInitialization вызываются для каждого бина, который создаёт Spring.

@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
System.out.println("Before Initialization: " + beanName);
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
System.out.println("After Initialization: " + beanName);
return bean;
}
}

Результат: Вывод сообщений о каждом бине до и после инициализации.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍144🔥2
🖥 java-class-extension — библиотека для эмуляции расширений классов (категорий) в Java!

🌟 Это позволяет добавлять функциональность к существующим классам без их изменения, улучшая модульность и следуя принципу единственной ответственности. Библиотека поддерживает статические и динамические расширения, которые можно использовать для добавления новых методов к объектам на основе интерфейсов.

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93🔥2
Умная инжекция и автодополнение методов | Spring Data JPA Repository | Amplicode

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72👍21
Что такое BeanFactoryPostProcessor в Spring?

BeanFactoryPostProcessor — это интерфейс из Spring Framework, который позволяет вмешиваться в процесс создания бинов в BeanFactory до их инициализации, но после того, как Spring их создал. Он предоставляет один основной метод:

🔘 postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) — вызывается до инициализации бинов. В этом методе можно изменять конфигурацию бинов, например, добавлять или изменять их свойства, влиять на их типы или даже на порядок их создания.

Зачем нужен BeanFactoryPostProcessor?

Он используется для того, чтобы дать возможность кастомизировать настройки Spring контейнера, не вмешиваясь в сам процесс создания объектов. Примеры:

- Изменение параметров конфигурации бинов, которые уже были определены в контексте.
- Использование кастомных значений или свойств для бинов до их создания.
- Управление зависимостями на уровне контейнера.
- Добавление пользовательских конфигураций, таких как создание собственных PropertyEditors или манипуляции с BeanDefinition.

Как это работает?

1️⃣ Spring сканирует контекст на наличие бинов, реализующих интерфейс BeanFactoryPostProcessor.
2️⃣ Эти бины выполняются до создания бинов в контейнере, и вы можете изменить BeanDefinition в контейнере.
3️⃣ Вы можете, например, изменять параметры и настройки бинов, задавать или корректировать их зависимости, которые будут использованы при создании бинов Spring.

Пример реализации:

@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
// Пример изменения beanDefinition
BeanDefinition beanDefinition = beanFactory.getBeanDefinition("someBean");
beanDefinition.getPropertyValues().add("someProperty", "newValue");
}
}

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

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍84
Media is too big
VIEW IN TELEGRAM
Знакомство с Micronaut

Пример CRUD приложения на Micronaut.

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2
23 шаблона проектирования для 99% разработчиков на Java

В этом исчерпывающем руководстве мы изучим все важные шаблоны ООП для написания кода.

Шаблоны проектирования  —  это испытанный способ решения проблемы в заданном контексте. Они скорее открыты, нежели придуманы, что очевидно и из применения слова «шаблон». Используя шаблон проектирования, вы получаете знания всех сообществ для безопасного решения этой проблемы.


Читать статью
👍15🔥43
🖥 hibernate-orm — популярный фреймворк для Java, который упрощает взаимодействие между объектно-ориентированными приложениями и реляционными базами данных!

🌟 Hibernate реализует спецификацию JPA (Java Persistence API) и предоставляет дополнительные возможности для работы с базами данных, такие как кэширование и трансакции.

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥1
Forwarded from Java Guru 🤓
Что будет результатом компиляции этого кода?
🔥5👍2
Media is too big
VIEW IN TELEGRAM
7+1 программа для тех, кто изучает Java.

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

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥2
Как работает ConcurrentSkipListMap под капотом?

ConcurrentSkipListMap — это потокобезопасная и отсортированная реализация интерфейса NavigableMap, которая работает на основе skip list (списка с пропусками). Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков: нижний уровень содержит все элементы в порядке сортировки, а верхние уровни — лишь часть элементов для ускорения поиска. При добавлении элемента случайно выбирается его "высота" (количество уровней, на которых он присутствует), что позволяет "перепрыгивать" через блоки данных на верхних уровнях и выполнять операции со сложностью O(log n).

Пример структуры:
lvl 3: 1 ------ 8
lvl 2: 1 --- 7 -- 8
lvl 1: 1 - 3 - 7 - 8 - 10


💡 Основные механизмы:

🟡Skip List: Многослойный список с пропусками, где верхние уровни помогают быстро достигать нужного диапазона элементов, снижая количество переходов по связям.
🟡Потокобезопасность обеспечивается за счёт использования CAS (Compare-And-Swap) операций и минимального блокирования. Модификации происходят безопасно без полной блокировки структуры.
🟡Элементы всегда хранятся в отсортированном порядке по их ключам, что позволяет выполнять операции вроде поиска диапазонов или итераций по упорядоченным ключам очень эффективно.
🟡Высокая доступность: чтение не блокируется, даже если выполняются параллельные операции вставки или удаления.

⚠️ Особенности:

🔘Операции чтения (например, get или containsKey) выполняются быстро и без блокировок благодаря структуре skip list.
🔘Операции записи (например, put и remove) синхронизированы, но производительность сохраняется за счёт оптимизации с использованием CAS.
🔘Поддерживает натуральный порядок ключей или порядок, определённый переданным компаратором.
🔘Эффективен для сценариев, где важны отсортированные данные и параллельный доступ, но количество обновлений не слишком велико.

🚀 Когда использовать ConcurrentSkipListMap?

- Если нужен параллельный доступ к отсортированной мапе.
- Для обработки диапазонов данных или частых операций чтения в упорядоченном виде.

🔗 Документация

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍83
😁
😁65👍6🔥2
Динамический массив

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

Он реализуется с помощью класса ArrayList. ArrayList представляет собой реализацию списка, который может изменять свой размер по мере необходимости.


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍186🔥3
В чём разница между throw и throws?

- throws: указывается в сигнатуре метода, чтобы сообщить, какие исключения метод может выбросить. Например, если метод может генерировать FileNotFoundException, это указывается так:
public void readFile() throws FileNotFoundException { ... }


Здесь throws не выбрасывает исключение, а только предупреждает, что оно может возникнуть.

- throw: используется непосредственно в теле метода, чтобы выбросить конкретное исключение. Пример:
if (file == null) {
throw new FileNotFoundException("Файл не найден");
}


Здесь throw запускает исключение, когда возникает определённое условие.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥64🎅1
Forwarded from Java Guru 🤓
Что будет результатом кода?
👍8🔥3
Forwarded from Java Guru 🤓
👍17🔥9😁61
Что такое S3 и как его использовать в Java?

Amazon S3 (Simple Storage Service) — это облачное хранилище от AWS, которое позволяет безопасно сохранять и извлекать данные любого объёма и формата. S3 предоставляет масштабируемое решение для хранения файлов, данных резервного копирования, статического контента для веб-приложений и многого другого.

🟡Ключевые особенности S3:

- Данные хранятся в виде объектов (файлов), которые организуются в бакеты.
- S3 легко интегрируется с приложениями благодаря API.
- Поддержка шифрования данных и управление доступом через IAM.
- От небольших проектов до огромных хранилищ данных.
- 99,999999999% (11 девяток!) долговечности данных.

🟡Как начать работу с S3 в Java?

1️⃣Подключите SDK:
Добавьте зависимость в ваш проект.

<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>{actualVersion}</version>
</dependency>


2️⃣Настройте доступ:
Создайте учетные данные AWS (Access Key и Secret Key). Эти ключи позволяют вашему приложению взаимодействовать с S3.

3️⃣Пример загрузки/выгрузки файла в/из S3:

public class S3Example {
public static void main(String[] args) {
S3Client s3 = S3Client.create();

// Загрузка файла в S3
s3.putObject(
PutObjectRequest.builder()
.bucket("my-bucket-name")
.key("example.txt")
.build(),
Paths.get("path/to/local/file.txt")
);
System.out.println("Файл успешно загружен в S3");

// Выгрузка файла из S3
s3.getObject(
GetObjectRequest.builder()
.bucket("my-bucket-name")
.key("example.txt")
.build(),
Paths.get("path/to/downloaded/file.txt")
);
System.out.println("Файл успешно выгружен из S3");
}
}


💡 Где это пригодится?

- Хранение статического контента для веб-приложений.
- Бэкапы данных и журналов.
- Интеграция с микросервисами для обмена файлами.
- Хранение обучающих наборов данных для ML.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍226🔥5
Лучшие практики по работе с DTO в IntelliJ IDEA | Amplicode

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥2
Trie

Trie (дерево префиксов) — это структура данных в виде дерева, используемая для хранения ассоциативных данных, например словарей.
Она позволяет эффективно хранить и находить слова по их префиксам.

Trie состоит из узлов, каждый из которых может ссылаться на несколько дочерних узлов. Каждая ветвь от корня до листа представляет одно слово, а символы слова образуют путь от корня до узла-листа.
Узлы, которые являются концом слова, помечаются специальным флагом.

Поиск слова заключается в прохождении от корня по ветвям символов этого слова. Добавление нового слова — добавление отсутствующих узлов для его символов.

Trie оптимальна для хранения словарей и поиска по префиксам благодаря эффективности этих операций.
В Java для реализации Trie удобно использовать HashMap в узлах для связей с дочерними узлами.


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7🔥4
Где вы чаще всего пишете код?

❤️ IntelliJ IDEA
🔥 Vim/Emacs
👍🏼 Eclipse
⚡️ VS Code
😁 Notepad++

Пишите в комментарии интересные/полезные фичи вашего инструмента
Please open Telegram to view this post
VIEW IN TELEGRAM
250👍2017😁9🔥8
Forwarded from Java Guru 🤓
Что будет результатом кода?
👍7🔥3