[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chto-takoe-spring-event-kak-sozdat-i-obrabotat-sobytie":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},651,"chto-takoe-spring-event-kak-sozdat-i-obrabotat-sobytie",14,"spring","Spring","🌱","Что такое Spring Event? Как создать и обработать событие?","Spring Events -- механизм публикации и обработки событий, реализующий паттерн Observer (Наблюдатель). Позволяет ослабить связность между компонентами.\n\n### Создание события (Spring 4.2+ -- просто POJO)\n\n```java\npublic class OrderCreatedEvent {\n    private final Long orderId;\n    private final Long userId;\n    private final BigDecimal amount;\n    \u002F\u002F конструктор, геттеры\n}\n```\n\n### Публикация события\n\n```java\n@Service\npublic class OrderService {\n    @Autowired\n    private ApplicationEventPublisher eventPublisher;\n\n    @Transactional\n    public Order createOrder(CreateOrderRequest request) {\n        Order order = orderRepository.save(new Order(request));\n        eventPublisher.publishEvent(new OrderCreatedEvent(\n                order.getId(), order.getUserId(), order.getAmount()));\n        return order;\n    }\n}\n```\n\n### Обработка события\n\n```java\n@Component\npublic class OrderEventListener {\n\n    \u002F\u002F Синхронный (в той же транзакции!)\n    @EventListener\n    public void handleOrderCreated(OrderCreatedEvent event) {\n        log.info(\"Заказ {} создан\", event.getOrderId());\n    }\n\n    \u002F\u002F Асинхронный (в отдельном потоке)\n    @Async\n    @EventListener\n    public void sendNotification(OrderCreatedEvent event) {\n        emailService.sendOrderConfirmation(event.getUserId());\n    }\n\n    \u002F\u002F После коммита транзакции\n    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)\n    public void afterOrderCommitted(OrderCreatedEvent event) {\n        \u002F\u002F выполнится только если транзакция успешно закоммичена\n    }\n\n    \u002F\u002F Условная обработка\n    @EventListener(condition = \"#event.amount > 10000\")\n    public void handleLargeOrder(OrderCreatedEvent event) {\n        auditService.flagForReview(event.getOrderId());\n    }\n}\n```\n\n> **На собеседовании:** ключевое -- `@TransactionalEventListener` для гарантии, что обработчик выполнится только после коммита. Частая ошибка -- использовать синхронный `@EventListener` для долгих операций (отправка email) внутри транзакции. Используйте `@Async` или `@TransactionalEventListener(phase = AFTER_COMMIT)`.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Что такое Spring Event? Как создать и обработать событие? — Gymterview","Spring Events -- механизм публикации и обработки событий, реализующий паттерн Observer (Наблюдатель). Позволяет ослабить связность между компонентами.","Spring Events -- механизм публикации и обработки событий, реализующий паттерн Observer (Наблюдатель). Позволяет ослабить",[7,13],true]