diff --git a/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java b/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java index cc26a34e560..184ccdb22ef 100644 --- a/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java +++ b/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java @@ -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 {