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
1 changed files with 17 additions and 2 deletions

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 {