Test for async event publication before listener initialized

Closes gh-20904
See gh-23501
See gh-25799
This commit is contained in:
Juergen Hoeller
2024-02-19 18:18:09 +01:00
parent 4a02893c31
commit 874e61a0c6

View File

@@ -567,7 +567,7 @@ class ApplicationContextEventTests extends AbstractApplicationEventListenerTests
}
@Test
void initMethodPublishesEvent() {
void initMethodPublishesEvent() { // gh-25799
GenericApplicationContext context = new GenericApplicationContext();
context.registerBeanDefinition("listener", new RootBeanDefinition(BeanThatListens.class));
context.registerBeanDefinition("messageSource", new RootBeanDefinition(StaticMessageSource.class));
@@ -582,7 +582,7 @@ class ApplicationContextEventTests extends AbstractApplicationEventListenerTests
}
@Test
void initMethodPublishesAsyncEvent() {
void initMethodPublishesAsyncEvent() { // gh-25799
GenericApplicationContext context = new GenericApplicationContext();
context.registerBeanDefinition("listener", new RootBeanDefinition(BeanThatListens.class));
context.registerBeanDefinition("messageSource", new RootBeanDefinition(StaticMessageSource.class));
@@ -596,6 +596,21 @@ class ApplicationContextEventTests extends AbstractApplicationEventListenerTests
context.close();
}
@Test
void initMethodPublishesAsyncEventBeforeListenerInitialized() { // gh-20904
GenericApplicationContext context = new GenericApplicationContext();
context.registerBeanDefinition("messageSource", new RootBeanDefinition(StaticMessageSource.class));
context.registerBeanDefinition("initMethod", new RootBeanDefinition(AsyncEventPublishingInitMethod.class));
context.registerBeanDefinition("listener", new RootBeanDefinition(BeanThatListens.class));
context.refresh();
context.publishEvent(new MyEvent(this));
BeanThatListens listener = context.getBean(BeanThatListens.class);
assertThat(listener.getEventCount()).isEqualTo(3);
context.close();
}
@SuppressWarnings("serial")
public static class MyEvent extends ApplicationEvent {