Вопрос с собеседования · Java

Что верно про реализацию паттерна Observer в современной Java?

MiddleПаттерны проектирования
Коротко

java.util.Observable устарел с Java 9. Современные формы: ApplicationEventPublisher и @EventListener в Spring, реактивные потоки (Flow, Reactor), брокеры сообщений. Подводные камни: синхронный слушатель делит поток и транзакцию с издателем, неотписанные подписчики текут, порядок вызова не гарантирован.

  • @TransactionalEventListener — обработка после коммита
  • @Async — вынести слушателя из потока издателя
  • Исключение в синхронном слушателе ломает издателя

А ещё Между сервисами — Kafka и outbox вместо событий в памяти

Подробно

Ссылаться на java.util.Observable как на актуальный пример не стоит — он deprecated с Java 9 из-за отсутствия типобезопасности и поддержки конкурентности. Современные воплощения: @EventListener и ApplicationEventPublisher в Spring (плюс @TransactionalEventListener, откладывающий обработку до коммита) и Reactive Streams, где к Observer добавлен backpressure. Ловушки — синхронность по умолчанию, утечки через сильные ссылки на подписчиков и негарантированный порядок.

Что хотят услышать

  • Почему Observable устарел.
  • Современные реализации.
  • Ловушки синхронности и утечек.

Частые ошибки

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

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓java.util.Observer и Observable объявлены deprecated начиная с Java 9
  • ✗Порядок уведомления подписчиков гарантирован спецификацией, поэтому на него можно смело полагаться
  • ✓Синхронный слушатель Spring по умолчанию выполняется в потоке и транзакции издателя, поэтому его исключение может откатить основную операцию
  • ✓Подписчики, которых забыли отписать, — классический источник утечки памяти

Что спросят дальше

  • Что делает @TransactionalEventListener и зачем он нужен?
  • Чем Reactive Streams отличается от классического Observer?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования