TL;DR:我认为它已经按照你想要的方式工作了
长版:
文档对此有些不清楚,但尝试了一个简单的测试:
发布事件的控制器:
@Controller
public class FooController {
@Autowired
private ApplicationEventPublisher publisher;
@GetMapping("/fireEvent")
public void fireEvent() {
publisher.publishEvent(new FooEvent(this));
}
}
Run Code Online (Sandbox Code Playgroud)
以及一个监听的作用域 bean:
@Scope(value = WebApplicationContext.SCOPE_REQUEST)
@Component
public class FooListener {
@EventListener(FooEvent.class)
public void listen() {
System.out.println("I'm listening. PS : I am "+this.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
当运行两个并发请求时,只有作用于同一 httprequest 的侦听器才能获取事件。
我的解释(没有深入研究过,所以持保留态度):
在我看来,ApplicationEventMulticaster'sListenerRetriever使用 BeanFactory 来获取先前注册为侦听器的 bean(按其名称)。显然,工厂将返回当前范围内的 bean。
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |