springboot的发布订阅模式的例子
时间: 2023-09-04 08:11:34 浏览: 82
在 Spring Boot 中,可以使用 Spring Framework 提供的事件机制实现发布订阅模式。下面是一个简单的例子:
首先,我们创建一个自定义事件 MyEvent:
```
public class MyEvent extends ApplicationEvent {
private String message;
public MyEvent(Object source, String message) {
super(source);
this.message = message;
}
public String getMessage() {
return message;
}
}
```
然后,我们创建一个事件发布者 MyPublisher,用来发布 MyEvent 事件:
```
@Component
public class MyPublisher {
@Autowired
private ApplicationEventPublisher publisher;
public void publishEvent(String message) {
MyEvent event = new MyEvent(this, message);
publisher.publishEvent(event);
}
}
```
最后,我们创建一个事件订阅者 MySubscriber,用来订阅 MyEvent 事件:
```
@Component
public class MySubscriber {
@EventListener
public void handleEvent(MyEvent event) {
System.out.println("Received message: " + event.getMessage());
}
}
```
在上面的代码中,我们使用 @Autowired 注解注入了 ApplicationEventPublisher 对象,然后在 publishEvent() 方法中创建了 MyEvent 事件,并通过 publishEvent() 方法发布事件。在 MySubscriber 类中,我们使用 @EventListener 注解标注了 handleEvent() 方法,该方法会在 MyEvent 事件被发布时被调用。
现在,我们可以在任何地方注入 MyPublisher 对象,并调用 publishEvent() 方法发布 MyEvent 事件。例如,在一个 Controller 中:
```
@RestController
public class MyController {
@Autowired
private MyPublisher publisher;
@GetMapping("/publish")
public String publishEvent() {
publisher.publishEvent("Hello, world!");
return "Event published.";
}
}
```
当我们访问 /publish 路径时,会调用 publishEvent() 方法发布一个 MyEvent 事件,并在 MySubscriber 类中的 handleEvent() 方法中输出 "Received message: Hello, world!"。
阅读全文