001package run.iget.framework.event;
002
003import org.springframework.context.ApplicationEventPublisher;
004import org.springframework.context.ApplicationEventPublisherAware;
005import org.springframework.stereotype.Component;
006
007import com.alibaba.fastjson.JSON;
008
009import lombok.extern.slf4j.Slf4j;
010
011@Slf4j
012@Component
013public class EventPublishUtils implements ApplicationEventPublisherAware {
014
015    private static ApplicationEventPublisher APPLICATION_EVENT_PUBLISHER = null;
016
017    @Override
018    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
019        APPLICATION_EVENT_PUBLISHER = applicationEventPublisher;
020    }
021
022    /**
023     * 发送事件
024     * @param event
025     */
026    public static void publish(AppEvent event) {
027        if (log.isDebugEnabled()) {
028            log.debug("发布事件消息:{}", JSON.toJSONString(event));
029        }
030        APPLICATION_EVENT_PUBLISHER.publishEvent(event);
031    }
032
033    /**
034     * 发送事件
035     * @param source 事件消息对象
036     */
037    public static void publish(Object source) {
038        AppEvent appEvent = null;
039        if (source instanceof AppEvent) {
040            appEvent = (AppEvent) source;
041        } else {
042            appEvent = AppEvent.of(source);
043        }
044        publish(appEvent);
045    }
046
047}