Telegram Web Link
🖥 Глубокое погружение в Java: рефлексия и загрузчик классов. Часть 3

Практический пример: добавление функциональности плагина в Java-приложение

Плагины — это небольшие программы, которые могут быть включены в работающее приложение для расширения его функциональности.
Рассмотрим редактор кода Visual Studio Code, который помогает в таких задачах разработки, как отладка, тестирование кода и контроль версий. Кроме того, он поставляется на рынок с тысячами расширений, которые могут загружать пользователи. Расширения варьируются от самых необходимых, таких как редактирование кода для определенного языка программирования, до премиальных (например, Prettier для обеспечения единого стиля кода и Better Comments, которое создает цветные комментарии к коду). Visual Studio Code предоставляет эти расширения по технологии plug-and-play.

Хотя VS code написан не на Java, идея архитектуры плагинов та же — необходимость расширения системы или подключения новой функциональности во время выполнения. Функциональность плагинов в Java-приложении реализуется с помощью рефлексии и загрузчиков классов. Создать простой плагин можно в три этапа:

1. Определение интерфейса плагина.
2. Определение загрузчика классов плагина.
3. Определение протокола для установки и запуска плагинов в системе.

На 1-м этапе должен быть определен единый интерфейс, через который приложение может запускать любой плагин.

public interface Plugin {

// возвращает имя плагина
public String getPluginName();

// запускает функциональность плагина
public void run();

// используется для настройки плагина, если это необходимо
// возвращает true/false при успешной/неудавшейся настройке
public boolean configure(Object configuration);
}

Все плагины должны иметь класс, реализующий этот интерфейс. Данный интерфейс выполняет роль маркера. При загрузке плагинов приложение рефлексивно проверяет классы в поисках класса, реализующего этот интерфейс. Он содержит метод run(), который является точкой входа для запуска плагина. В качестве альтернативы можно использовать аннотации для обозначения функции запуска плагина, аналогично примеру JUnit.

На 2-м этапе для загрузки классов плагина определяется специальный загрузчик классов. Это требуется по многим причинам.

▪️Класс однозначно идентифицируется по его имени и загрузчику классов. Загрузка плагина с помощью специального загрузчика классов создает уникальное пространство имен для классов плагина. Это предотвращает возникновение конфликтов между классами приложения и классами плагина. Например, если и приложение, и плагин определили класс с именем Foo, то JVM будет знать, как их различать, поскольку класс Foo приложения был загружен Application ClassLoader, а класс Foo плагина — специализированным загрузчиком классов, и каждый из них будет иметь свой объект Class.
▪️Не следует полностью доверять безопасность приложения коду внешнего плагина. Он может содержать непроверенный, ошибочный или вредоносный код. Наличие отдельного загрузчика классов, загружающего классы плагинов, позволяет наложить ограничения по безопасности на классы плагинов (подробнее об этом здесь).

Будет удобнее определить специальный путь для всего кода плагина. Загрузчик классов плагина будет искать файлы классов по этому пути, и его можно определить следующим образом:

Далее
Часть 2.

@javatg
🆕Java news🆕

Java выпустила новое обновление, включающее в себя Spring Framework 6.1, Spring Data 2023.1, Payara Platform, JEPs for JDK 22.

Вышел JEP 456.

JEP 456: Unnamed Variables and Patterns — расширение языка Java с безымянными переменными, которые могут быть инициализированы, но не использованы. А еще — с безымянными шаблонами, которые сопоставляются с компонентом записи, не указывая имя или тип компонента. Оба обозначаются символом подчеркивания. Эта фича уже есть в Java 21, но в качестве preview, предлагается завершить изменение.

С выходом 22 версии множество функций и дополнений перешли из фазы "Preview" в самодостаточные версии, уже доработанных функций.

Подробнее о всех обновлениях вы можете узнать тут:
ℹ️InfoQℹ️

@javatg
📣 Вышел Kotlin 1.9.21! В этом обновлении решен целый ряд проблем, включая проблемы регрессии.

Кроме того, в Kotlin 1.9.21 реализована kapt-совместимость с JDK21.

Для получения полной информации ознакомьтесь с журналом изменений здесь ⬇️.

https://github.com/JetBrains/kotlin/releases/tag/v1.9.21

@javatg
#Java #SpringBoot Совет: Вы можете запустить метод в Spring
@Service сразу после запуска приложения, аннотировав его с помощью @EventListener (ApplicationReadyEvent.class).

Метод не может иметь параметров. Иногда я использую его для быстрого тестирования определенного метода Spring Service

@javatg
#Java21 включает длинный список новых возможностей, в том числе виртуальные потоки и сильный акцент на улучшении Java для рабочих нагрузок #AI.

В этой статье рассказывается об этом.

⚡️ Читать дальше

@javatg
🤖 Как создать приложение Android за 7 шагов

Создать первое Android-приложение не так сложно, как может показаться.

В этом руководстве мы поможем вам создать первое Android-приложение и запустить его на телефоне.

Android — это операционная система на базе ядра Linux, предназначенная для мобильных устройств с сенсорным экраном, таких как смартфоны, планшеты и смарт-часы.

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

Android был представлен в 2007 году вместе с основанием Open Handset Alliance (альянсом компаний по разработке открытых стандартов для мобильных устройств).

В нашей статье не будем углубляться в установку и настройку Android Studio и посчитаем что она уже установлена.

Создаем приложение Android
Шаг 1.
Дважды кликните на программу “Android Studio”.
Шаг 2. Кликните “New Project”.
Шаг 3. Выберите “Empty Activity”

📌 Далее

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 #Java #JPA Совет: Если вы же используете генератор метамоделей в своем проекте, вы можете использовать сгенерированные классы моделей в атрибуте mappedBy ваших отношений, что обеспечит безопсность типов.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
SSL vs TLS - в чем разница?

SSL и TLS - это криптографические протоколы, предназначенные для обеспечения безопасного обмена данными по сети.

1️⃣Начало обмена данными

SSL и TLS: перед отправкой данных необходимо установить соединение. На этом этапе оба протокола работают одинаково.

2️⃣Сообщения ClientHello и ServerHello

После установления соединения клиенту и серверу необходимо согласовать настройки безопасности.

SSL: клиент отправляет список поддерживаемых наборов шифров и другие настройки.

TLS: наряду с поддерживаемыми наборами шифров и другими настройками клиент также может отправить "ключевой ресурс" для Diffie-Hellman или Elliptic Curve Diffie-Hellman.

3️⃣Сертификат сервера

SSL и TLS: после обмена сообщениями "ClientHello" и "ServerHello" сервер отправляет клиенту свой цифровой сертификат.

4️⃣Обмен ключами

На этом этапе протоколы существенно различаются.

SSL: преимущественно использует RSA для обмена ключами.
TLS: использует другие механизмы, такие как DH и ECDH.

@javatg
🌟Вышел очередной дайджест новостей Kotlin!

Этот выпуск посвящен многим интересным событиям в мультиплатформенной экосистеме Kotlin.

➡️ https://blog.jetbrains.com/kotlin/2023/12/kotlin-news-nov-23/

🌟 Представляем Amper, новый экспериментальный инструмент для настройки проектов
🌟 Мультиплатформа Kotlin стабильна и готова к работе
🌟 Мультиплатформа Kotlin приходит в JetBrains Fleet
🌟 Вышли Kotlin 1.9.20 и 1.9.21
🌟 Руководство по Compose Multiplatform
🌟 Дорожная карта развития Kotlin Multiplatform на 2024 год
🌟 Серия вебинаров по Kotlin Multiplatform в ноябре
🌟 Code 2023 в Kotlin

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻Сложные вопросы на собеседовании для тех, кто 7 лет работал с Java. Часть 1

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

Но на собеседованиях даже опытные разработчики не справляются с каверзными вопросами, которыми проверяются их знания и навыки решения задач. Разберем некоторые их этих вопросов с подробными объяснениями и примерами.

1. Для чего и как в Java используется ключевое слово «transient»?
При сериализации объекта его состояние преобразуется в последовательность байтов, записываемой в файл или отправляемой по сети.

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

Примеры использования ключевого слова transient: когда имеется поле с временным значением, которое не нужно сохранять при сериализации объекта; или поле с конфиденциальными данными, не включаемое в сериализованную форму объекта по соображениям безопасности.

public class MyClass implements Serializable {
private int myInt;
private transient String myTransientString;
// Конструктор, геттеры, сеттеры ради простоты игнорируем
// Другие методы…
}


В этом примере поле myTransientString помечено как transient: его значение не будет включено при сериализации экземпляра MyClass.

2. Чем наследование отличается от композиции? Приведите пример.
Наследование и композиция — два фундаментальных способа создания связей между классами в ООП. В обоих подходах возможны переиспользование кода и абстракция, но с разной реализацией и типами таких связей.

Вот краткое описание каждого подхода.

▪️Наследование. Это механизм, при котором новый класс, называемый подклассом или производным классом, создается наследованием свойств и характеристик — методов и полей — имеющегося класса, называемого суперклассом или базовым классом. Кроме того, методы суперкласса переопределяются подклассом в его собственной реализации. Наследованием между суперклассом и подклассом создаются отношения is-a («это»).
▪️Композиция. Это механизм, при котором в полях одного класса, называемого контейнером или целым классом, содержится минимум один экземпляр другого, называемого компонентным или составным классом. Композицией между классом-контейнером и компонентным классом создаются отношения has-a («имеет»).

📌 Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Обзор архитектуры безопасности Spring Security

Ключевые компоненты:

1️⃣Менеджер аутентификации:
- Отвечает за проверку учетных данных пользователей.
- Использует различные провайдеры аутентификации (например, LDAP, JDBC).
2️⃣Контекст безопасности:
- Хранит информацию о текущем аутентифицированном пользователе.
3️⃣Провайдер аутентификации:
- Реализует фактический процесс аутентификации.
4️⃣Авторизация:
- Контролирует доступ к определенным ресурсам на основе ролей и разрешений пользователей.

🔄 Поток аутентификации:

1️⃣Цепочка фильтров:
- Каждый фильтр обрабатывает определенный аспект процесса аутентификации.
2️⃣Аутентификация по имени пользователя и паролю:
- Типичный вход в систему включает в себя фильтр UsernamePasswordAuthenticationFilter.
- Проверяет учетные данные пользователя в AuthenticationManager.
3️⃣Аутентификация на основе токенов:
- Обеспечивает аутентификацию без статических данных с помощью токенов (например, JWT).

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Совет 🚀 Java API 🚀

При использовании Integer.valueOf(int) помните, что значения между -128 и 127 кэшируются для повышения производительности.

За пределами этого диапазона создаются новые объекты.

Размер кэша можно контролировать с помощью параметра -XX:AutoBoxCacheMax=<size>. 🔥

#Java #Производительность

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Java за неделю

Почитать:
Немного о гигиене Java кода
Польза создания однородных задач для параллельного вычисления
Безопасность web приложений с использованием Identity Provider
Java Digest #7
8 бесплатных курсов по большим языковым моделям
Современные варианты баз данных
Деплой приложения на Java. Хостим проект через push в Git
QIWI Server Party 9.0 — 14 декабря, офлайн и онлайн
Как распараллелить тесты с базой данных
Хроники пикирующего бота или как важно не пропускать стадию QA в проектах
Генерация контрактов OpenApi или прикладной API first: совсем немного про зачем
Компоновка аннотаций в Spring
Dominando la Programación Orientada a Objetos
Try to add new feature to a Java Spring boot project
Few words about Java code hygiene
RabbitMQ Retry Strategy: Delay with Maximum Retry Threshold
Mi experiencia con GraalVM y Spring Boot
Records and data transfer
Comparing Java and JavaScript
Day when Skynet becomes self-aware, and 69 reasons to chill out with colleagues. Part 1.
How Gradle disagreed with our Maven project
What is Amortized Time Complexity Analysis

Посмотреть:
🌐 Ollama — модель уровня GPT. Используй GPT без ограничений и абсолютно бесплатно.
🌐 Another VS Code Extension For Java ? ( 07:38)
🌐 Java 22 Unpacking - Inside Java Newscast #59 ( 12:23)
🌐 What is multiple inheritance? - Cracking the Java Coding Interview ( 00:59)
🌐 What is the first thing a consructor is doing? - Cracking the Java Coding Interview #java ( 01:00)
🌐 Getting Started with Generational ZGC ( 12:49)
🌐 Looking up Default Locale in Java 21 ( 02:01)
🌐 Аналитики больше технари, чем программисты? Чья работа сложнее? ( 01:06:26)
🌐 Сильная мотивация для джунов в IT — Евгений Кот ( 00:38)
🌐 Когда нужно искать первую работу в IT — Андрей Смирнов ( 00:37)

Хорошего дня!

@javatg
🚀 Spring Совет 🚀

Кэшируемая аннотация обеспечивает быстрый доступ к данным.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/cache/annotation/Cacheable.html

#Spring #SpringBoot

@javatg
💡 В Mockito 5.7.0 (входит в Spring Boot 3.2) появился упрощенный способ создания захватчиков аргументов:

@javatg
🖥 Ключевые вопросы для собеседования по Spring Boot в 2023 году. Часть 2

Что представляют собой HTTP-методы?
Вот наиболее часто используемые HTTP-методы.

1. GET: получает ресурс или данные с сервера.

2. POST: отправляет данные для обработки на сервер, что обычно приводит к созданию нового ресурса.

3. PUT: обновляет или заменяет существующий ресурс новыми данными.

4. DELETE: удаляет конкретный ресурс.

5. PATCH: частично обновляет существующий ресурс новыми данными.

6. HEAD: получает метаданные ресурса без извлечения его фактического содержимого.

7. OPTIONS: возвращает допустимые HTTP-методы и возможности сервера для данного ресурса.

Эти HTTP-методы обеспечивают различные способы взаимодействия с ресурсами на сервере, позволяя выполнять различные операции, такие как получение, создание, обновление и удаление данных.

Что такое идемпотентность? Назовите идемпотентные методы
В REST (Representational State Transfer, передача репрезентативного состояния) под идемпотентностью понимается свойство некоторых HTTP-методов, при котором повторные идентичные запросы имеют тот же эффект, что и один запрос. Другими словами, многократное выполнение идемпотентной операции приводит к тому же результату, что и однократное.

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

В REST идемпотентными считаются следующие HTTP-методы.

▪️GET: многократное получение ресурса не изменяет состояние сервера.
▪️PUT: многократное обновление ресурса одними и теми же данными приводит к одному и тому же результату.
▪️DELETE: многократное удаление ресурса приводит к одному и тому же результату.

Проектирование идемпотентных методов в RESTful API помогает обеспечить надежность, согласованность и отказоустойчивость распределенных систем, позволяя добиться надежного и предсказуемого поведения.

Что такое @Async в Spring Boot?

📌Читать

📌Часть 1

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Расширенные советы по Spring 🚀

Протоколирование HTTP-запросов с помощью фильтра CommonsRequestLoggingFilter

Включите протоколирование запросов с помощью фильтра CommonsRequestLoggingFilter, чтобы получать подробную информацию о входящих запросах. 🔥

Подробнее: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/CommonsRequestLoggingFilter.html

#SpringTip #Java

@javatg
🔥Подборка лучших обучающих каналов для программистов.

➡️Делитесь с коллегами и Сохраняйте себе, чтобы не потерять

Машинное обучение

Machine Learning - полезные статьи новости гайды и разбор кода
Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат

🚀 Data Science

Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data

🏆 Golang
Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go



#️⃣C#

С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа

🐍 Python

Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги

Java

Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги

💻 C++

C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии

💥 Хакинг Kali Linux

Kali linux
linux_kal - kali чат
Информационная безопасность

🐧 Linux

Linux academy

🦀 Rust
Rust программирование
Rust чат

🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат

📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки

🖥 Javascript/React/PHP
Javascript академия
React программирование
PHP
Книги frontend
Задачи frontend

🇬🇧 Английский для программистов

🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence

🔥 DevOPs
Devops для программистов
Книги Devops
Docker

📓 Книги
Библиотеки Книг для программситов

💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
🚀 Совет по IntelliJ - создайте свой собственный значок проекта 🚀

Определите пользовательский значок для вашего проекта в IntelliJ, который будет отображаться на экране приветствия. 🔥

@javatg
2024/10/03 15:24:04
Back to Top
HTML Embed Code: