mirror of https://github.com/halo-dev/halo
2.1 KiB
2.1 KiB
插件中如何发送共享事件(SharedEvent)
在插件中,可以通过共享事件(SharedEvent)来发送消息。 共享事件是一种特殊的事件,它可以被核心和所有插件订阅。
订阅共享事件
目前,核心中已经提供了不少的共享事件,例如 run.halo.app.event.post.PostPublishedEvent
、run.halo.app.event.post.PostUpdatedEvent
,这些事件由核心发布,核心和插件均可订阅。请看下面的示例:
@Component
public class PostPublishedEventListener implements ApplicationListener<PostPublishedEvent> {
@Override
public void onApplicationEvent(PostPublishedEvent event) {
// Do something
}
}
或者通过 @EventListener
注解实现,
@Component
public class PostPublishedEventListener {
@EventListener
// @Async // 如果需要异步处理,可以添加此注解
public void onPostPublished(PostPublishedEvent event) {
// Do something
}
}
需要注意的是,只有被
@SharedEvent
注解标记的事件才能够被其他插件或者核心订阅。
发送共享事件
在插件中,我们可以通过 ApplicationEventPublisher
来发送共享事件,请看下面的示例:
@Service
public class PostService {
private final ApplicationEventPublisher eventPublisher;
public PostService(ApplicationEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
public void publishPost(Post post) {
// Do something
eventPublisher.publishEvent(new PostPublishedEvent(post));
}
}
创建共享事件
在插件中,我们可以创建自定义的共享事件,供其他插件订阅,示例如下:
@SharedEvent
public class MySharedEvent extends ApplicationEvent {
public MySharedEvent(Object source) {
super(source);
}
}
需要注意的是:
- 共享事件必须继承
ApplicationEvent
。- 共享事件必须被
@SharedEvent
注解标记。- 如果想要被其他插件订阅,则需要将该事件类发布到 Maven 仓库中,供其他插件引用。