Обновить
128K+

Java *

Объектно-ориентированный язык программирования

258,7
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Реализация Spring Framework API с нуля. Пошаговое руководство для начинающих. Часть 1

Время на прочтение19 мин
Охват и читатели71K


Spring Framework является одним из самых сложных фремворков для понимания и изучения. Большинство разработчиков изучают его медленно, через практические задачи и гугл. Этот подход не эффективен, так как не даёт полной картины и при этом требует больших затрат.

Я хотел бы предложить вам принципиально новый подход к изучению Спринга. Он заключается в том, что человек проходит через серию специально подготовленных туториалов и самостоятельно реализует функционал спринга. Особенность этого подхода в том, что он, помимо 100%-го понимания изучаемых аспектов Spring даёт ещё большой прирост в Java Core (Annotations, Reflection, Files, Generics).

Статья подарит вам незабываемые ощущения и позволит почувствовать себя разработчиком Pivotal. Шаг за шагом, вы сделаете ваши классы бинами и организуете их жизненный цикл (такой же, как и в реальном спринге). Классы, которые вы будете реализовывать — BeanFactory, Component, Service, BeanPostProcessor, BeanNameAware, BeanFactoryAware, InitializingBean, PostConstruct, PreDestroy, DisposableBean, ApplicationContext, ApplicationListener, ContextClosedEvent.
Читать дальше →

Как я заменил RxJava на корутины в своем проекте и почему вам вероятно также стоит это сделать

Время на прочтение7 мин
Охват и читатели26K
Привет, Хабр! Представляю вам перевод статьи автора Paulo Sato на тему использования Kotlin Coroutines вместо RxJava в своих Android проектах.

RxJava как базука, большинство приложений не использует и половины её огневой мощи. В статье пойдет речь о том, как заменить её корутинами (сопрограммами) Kotlin.

Я работал с RxJava в течении нескольких лет. Это определенно одна из лучших библиотек для любого Android проекта, которая и сегодня в ударе, особенно, если вы программируете на Java. Если же вы используете Kotlin, то можно сказать, что в городе новый шериф.

Большинство использует RxJava только для того, чтобы контролировать потоки и для предотвращения callback hell (если вы не знаете, что это такое, считайте себя счастливчиком и вот почему). Дело в том, что мы должны иметь ввиду, что реальная мощь RxJava — это реактивное программирование и backpressure. Если вы используете её для контроля асинхронных запросов, вы используете базуку, чтобы убить паука. Она будет делать свою работу, но это перебор.

Одним заметным недостатком RxJava является количество методов. Оно огромно и имеет тенденцию расползаться по всему коду. В Kotlin вы можете использовать корутины для реализации большей части поведения, которое вы ранее создавали, используя RxJava.

Но… что такое корутины?

Корутин — это способ обработки конкурентных задач в потоке. Поток будет работать пока не остановлен и контекст будет меняться для каждого корутина без создания нового потока.
Корутины в Kotlin всё еще являются эксперементальными, но они вошли в Kotlin 1.3, так что я написал ниже новый класс UseCase (для clean architecture), использующий их. В этом примере, вызов корутин инкапсулирован в одном файле. Таким образом, другие слои не будут зависеть от выполняемых сопрограмм, обеспечивая более разъединенную архитектуру.
Читать дальше →

«Мы даже не пытаемся запустить старый код, такой задачи у нас не стоит в принципе» — Роман Елизаров о разработке Kotlin

Время на прочтение26 мин
Охват и читатели21K
Если хочешь в чем-то разобраться — учись сразу у лучших. Сегодня на мои вопросы отвечает бог корутин и concurrency, Рома elizarov Елизаров. Мы поговорили не только о Kotlin, как вы могли бы подумать, но ещё и о куче смежных тем:

  • Golang и горутины;
  • JavaScript и его применимость для серьезных проектов;
  • Java и Project Loom;
  • олимпиадное программирование на Kotlin;
  • как правильно обучаться программированию;
  • и другие волнующие вещи.


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

[Екатеринбург, анонс] Митап по Java — JUG.EKB

Время на прочтение2 мин
Охват и читатели1.2K


Каждые полгода NAUMEN проводит митапы для разработчиков Java – JUG.EKB. Очередная встреча пройдет 13 сентября.

Мы выбрали эту дату, потому что 13 сентября – это 256 день в этом году! А когда еще собраться на митап, если не в свой профессиональный праздник? Когда, как не в этот день, послушать доклады, задать вопросы спикерам, обсудить с коллегами сложности в работе, получить совет или самому помочь кому-то в решении задачи, а потом вместе остаться на афтепати?
Читать дальше →

Открытый урок «Aсинхронное программирование в Java»

Время на прочтение1 мин
Охват и читатели8.3K
Всем привет!

Делимся с вами очередным открытым уроком, который прошёл у нас в рамках курса «Разработчик Java». На нём преподаватель курса, Владимир Сонькин, рассказывал про асинхронное программирование почему оно позволяет делать код быстрым и эффективным, не используя сложные технологии распараллеливания. Также показывал примеры применения асинхронности для построения процессов обработки данных в бизнес-приложениях.



Как всегда ждём комментарии, вопрос, которые можно оставить тут или зайти на день открытых дверей.

Курс «Разработка на Java» от Mail.Ru Group на канале Технострим

Время на прочтение4 мин
Охват и читатели20K


Этой весной мы выложили на канале Технострим запись курса по Java. Уже несколько семестров подряд он читается в рамках образовательного проекта Техносфера, реализуемого компанией Mail.Ru Group совместно с МГУ им. М. В. Ломоносова. Курс включает все темы, необходимые начинающему разработчику в мире Java. Авторы не углубляются в детали синтаксиса, а сразу берутся за практические задачи: разработку игры с консольным интерфейсом и функционального чата. В конце курса разбираются частые вопросы из собеседований на позиции junior и middle Java-developer.

Записи лекций и материалы курса бесплатны и доступны всем желающим.

Большинство домашних заданий можно выполнить и проверить в репозитории курса.
Читать дальше →

Анимированные числа на Android

Время на прочтение9 мин
Охват и читатели7.8K

Красивый и привлекательный UI — это важно. Поэтому для Android существует огромное количество библиотек для красивого отображения элементов дизайна. Часто в приложении требуется показать поле с числом или какой-либо счетчик. Например, счетчик количества выделенных элементов списка или сумму расходов за месяц. Конечно, такая задача легко решается с помощью обычного TextView, но можно ее решить элегантно и еще анимацию изменения числа добавить:


demo


На YouTube доступно Demo-видео.


В статье пойдет рассказ о том, как все это реализовать.

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

Корректное получение доступа к default методам интерфейсов через рефлексию в Java 8, 9, 10

Время на прочтение12 мин
Охват и читатели8.7K
Примечание переводчика: развитие фреймворка CUBA порождает большое количество R&D проектов. В ходе одного такого проекта выяснилось, что нам нужно вызывать default методы интерфейсов из прокси классов. Наткнулись на очень полезную статью, мне кажется, что опыт, изложенный в ней, будет, как минимум интересен, как максимум — полезен широкому кругу разработчиков.

Когда дело касается доступа к default методам интерфейсов в Java через рефлексию, гугление не очень помогает. Например, решение на StackOverflow работает только в определенных ситуациях и не на всех версиях Java.

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

TL;DR Если вам не терпится, то все способы вызова default методов, описанные в этой статье, доступны по этой ссылке, а также эта проблема уже решена в нашей библиотеке jOOR.
Читать дальше →

Технический митап в Петербурге 13 сентября — Как делать большие изменения на бэкенде

Время на прочтение2 мин
Охват и читатели1.4K
image

Часто приложения развиваются посредством множества небольших улучшений, но наступает момент, когда множество частностей выстраивается в цельную картину, реализация которой требует качественных и масштабных изменений. И здесь только одной хорошей идеи недостаточно. Не менее важны организационная и техническая составляющие вопроса. Как подготовиться и осуществить архитектурные изменения в работающей системе? Мы хотим поговорить о глобальном рефакторинге, повышении производительности систем, оптимизации кода, подходах работы с базами данных и многих других вещах.
Читать дальше →

FreeMarker шаблоны

Время на прочтение8 мин
Охват и читатели105K
Apache FreeMarker — это механизм шаблонов: библиотека Java для генерации текстового вывода (HTML-страницы, xml, файлы конфигурации, исходный код и.т.д. На вход подается шаблон, например html в котором есть специальные выражения, подготавливаются данные соответствующие этим выражением, а Freemarker динамически вставляет эти данные и получается динамически заполненный документ.

image
Читать дальше →

REST-assured: полезные советы

Время на прочтение4 мин
Охват и читатели115K
В данной статье я собрал полезные советы по использованию REST-assured, одной из самых распространенных Java-библиотек для автоматизации тестирования REST-API.

Все примеры жизненные, они собраны из моей практики проведения code-review в более чем 50 проектах с автотестами.
Читать дальше →

Kotlin + React vs Javasript + React

Время на прочтение7 мин
Охват и читатели23K
Мысль перевести фронт на какой-либо js фреймворк появилась одновременно с возможностью писать React на Kotlin. И я решил попробовать. Основная проблема: мало материалов и примеров (постараюсь эту ситуацию поправить). Зато у меня полноценная типизация, безбоязненный рефакторинг, все возможности Kotlin, а главное, общий код для бека на JVM и фронта на Javascript.

В этой статье будем писать страницу на Javasript + React параллельно с её аналогом на Kotlin + React. Чтобы сравнение было честным, я добавил в Javasript типизацию.


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

Внутренняя работа HashMap в Java

Время на прочтение6 мин
Охват и читатели328K

[примечание от автора перевода] Перевод был выполнен для собственных нужд, но если кому -то это окажется полезным, значит мир стал хоть немного, но лучше! Оригинальная статья — Internal Working of HashMap in Java


В этой статье мы увидим, как изнутри работают методы get и put в коллекции HashMap. Какие операции выполняются. Как происходит хеширование. Как значение извлекается по ключу. Как хранятся пары ключ-значение.

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

Ближайшие события

Пятничные вебинары от Skillbox: разработка и разработчики

Время на прочтение2 мин
Охват и читатели2.1K


Сегодня снова пятница, и мы публикуем очередную подборку бесплатных вебинаров. Тематика — разработка: обзор языков программирования, путь программиста, основы JavaScript. Если вам интересно — вперед!

Как я изучаю фреймворк Spring — часть 2 (помощь начинающим — дело рук самих начинающих)

Время на прочтение5 мин
Охват и читатели6.1K


Добрый день!

Я вдохновился приглашением продолжить публикацию, поэтому продолжаю.

В этот раз мы рассмотрим основные варианты внедрения зависимости — через конструктор и через сеттеры. Все исходники искать здесь
Читать дальше →

Пишем Java-френдли Kotlin-код

Время на прочтение21 мин
Охват и читатели13K
Со стороны может показаться, что Kotlin упростил Android-разработку, вообще не принеся при этом новых сложностей: язык ведь Java-совместимый, так что даже большой Java-проект можно постепенно переводить на него, не забивая ничем голову, так? Но если заглядывать глубже, в каждой шкатулке найдётся двойное дно, а в трюмо — потайная дверца. Языки программирования — слишком сложные проекты, чтобы их совмещение обходилось без хитрых нюансов.

Разумеется, это не означает «всё плохо и использовать Kotlin вместе с Java не надо», а означает, что стоит знать о нюансах и учитывать их. На нашей конференции Mobius Сергей Рябов рассказал, как писать на Kotlin такой код, к которому будет комфортно обращаться из Java. И доклад так понравился зрителям, что мы не только решили разместить видеозапись, но и сделали для Хабра текстовую версию:

текстовая версия

Как я изучаю фреймворк Spring (помощь начинающим — дело рук самих начинающих)

Время на прочтение6 мин
Охват и читатели34K
Добрый день!

Я поставил себе цель изучить фреймфорк Spring для языка Java. Во время изучения решил проверить на себе алгоритм обучения Ричарда Фейнмана: организовать-упростить-обучить другого. В общем, я стал записывать серию коротких уроков для начинающих по работе в Spring. Для желающих повторить выложил исходный код.
Читать дальше →

Java REST в Школе Программистов HeadHunter

Время на прочтение11 мин
Охват и читатели8.1K

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


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

Предбольничный хотфикс или “Эй, Swagger! А где мои ошибки”?

Время на прочтение6 мин
Охват и читатели5.2K
Случалось ли вам налажать во время хотфикса в мастер? Нет?! А вот мне удалось!

Эта история о том, как я забыл обновить документацию. Как в итоге, написал плагин для Swagger (со второго раза). И как увлекся этим так, что забыл про свой больничный и пошел на поправку!


А еще немного про Optional не из Java 8.
История провала и успеха

Миграция на JUnit 5 за 10 мин. Измерение времени тестов с помощью Extensions

Время на прочтение2 мин
Охват и читатели5.2K
Здравствуйте!

На последней стажировке Spring 5/JPA Enterprise (Topjava) наш учебный проект мигрировал с JUnit 4 на JUnit 5.2. Основной процесс миграции достаточно прямолинеен, но есть некоторые нюансы, которые требуют ручного вмешательства. Хочу кратко рассказать про них и создании JUnit 5 Extensions для измерения времени тестов в 10 минутном видео.


Код расширения для измерения времени тестов
import org.junit.jupiter.api.extension.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StopWatch;

public class TimingExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback, BeforeAllCallback, AfterAllCallback {

    private static final Logger log = LoggerFactory.getLogger("result");

    private StopWatch stopWatch;

    @Override
    public void beforeAll(ExtensionContext ctx) {
        stopWatch = new StopWatch("Execution time of " + ctx.getRequiredTestClass().getSimpleName());
    }

    @Override
    public void beforeTestExecution(ExtensionContext ctx) {
        log.info("Start stopWatch");
        stopWatch.start(ctx.getDisplayName());
    }

    @Override
    public void afterTestExecution(ExtensionContext ctx) {
        stopWatch.stop();
        log.info("stop stopWatch");
    }

    @Override
    public void afterAll(ExtensionContext ctx) {
        log.info('\n' + stopWatch.prettyPrint() + '\n');
    }
}


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