|
18 | 18 |
|
19 | 19 | import java.util.Arrays; |
20 | 20 | import java.util.Collections; |
| 21 | +import java.util.LinkedHashSet; |
21 | 22 | import java.util.Set; |
22 | 23 | import java.util.concurrent.atomic.AtomicReference; |
23 | 24 |
|
|
31 | 32 | import org.springframework.beans.factory.support.DefaultBeanNameGenerator; |
32 | 33 | import org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext; |
33 | 34 | import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory; |
| 35 | +import org.springframework.boot.context.event.ApplicationPreparedEvent; |
34 | 36 | import org.springframework.context.ApplicationContext; |
35 | 37 | import org.springframework.context.ApplicationContextAware; |
36 | 38 | import org.springframework.context.ApplicationContextInitializer; |
| 39 | +import org.springframework.context.ApplicationEvent; |
37 | 40 | import org.springframework.context.ApplicationListener; |
38 | 41 | import org.springframework.context.ConfigurableApplicationContext; |
39 | 42 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
40 | 43 | import org.springframework.context.annotation.AnnotationConfigUtils; |
41 | 44 | import org.springframework.context.annotation.Bean; |
42 | 45 | import org.springframework.context.annotation.Configuration; |
43 | 46 | import org.springframework.context.event.ContextRefreshedEvent; |
| 47 | +import org.springframework.context.event.SimpleApplicationEventMulticaster; |
44 | 48 | import org.springframework.context.support.StaticApplicationContext; |
45 | 49 | import org.springframework.core.Ordered; |
46 | 50 | import org.springframework.core.env.CommandLinePropertySource; |
|
55 | 59 | import org.springframework.util.StringUtils; |
56 | 60 |
|
57 | 61 | import static org.hamcrest.Matchers.equalTo; |
| 62 | +import static org.hamcrest.Matchers.hasItem; |
58 | 63 | import static org.hamcrest.Matchers.instanceOf; |
59 | 64 | import static org.hamcrest.Matchers.is; |
| 65 | +import static org.hamcrest.Matchers.isA; |
60 | 66 | import static org.hamcrest.Matchers.sameInstance; |
61 | 67 | import static org.hamcrest.Matchers.startsWith; |
62 | 68 | import static org.junit.Assert.assertArrayEquals; |
@@ -436,6 +442,39 @@ public void registerShutdownHook() throws Exception { |
436 | 442 | verify(applicationContext.getApplicationContext()).registerShutdownHook(); |
437 | 443 | } |
438 | 444 |
|
| 445 | + @Test |
| 446 | + public void registerListener() throws Exception { |
| 447 | + SpringApplication application = new SpringApplication(ExampleConfig.class); |
| 448 | + application.setApplicationContextClass(SpyApplicationContext.class); |
| 449 | + final LinkedHashSet<ApplicationEvent> events = new LinkedHashSet<ApplicationEvent>(); |
| 450 | + application.addListeners(new ApplicationListener<ApplicationEvent>() { |
| 451 | + @Override |
| 452 | + public void onApplicationEvent(ApplicationEvent event) { |
| 453 | + events.add(event); |
| 454 | + } |
| 455 | + }); |
| 456 | + this.context = application.run(); |
| 457 | + assertThat(events, hasItem(isA(ApplicationPreparedEvent.class))); |
| 458 | + assertThat(events, hasItem(isA(ContextRefreshedEvent.class))); |
| 459 | + } |
| 460 | + |
| 461 | + @Test |
| 462 | + public void registerListenerWithCustomMulticaster() throws Exception { |
| 463 | + SpringApplication application = new SpringApplication(ExampleConfig.class, |
| 464 | + Multicaster.class); |
| 465 | + application.setApplicationContextClass(SpyApplicationContext.class); |
| 466 | + final LinkedHashSet<ApplicationEvent> events = new LinkedHashSet<ApplicationEvent>(); |
| 467 | + application.addListeners(new ApplicationListener<ApplicationEvent>() { |
| 468 | + @Override |
| 469 | + public void onApplicationEvent(ApplicationEvent event) { |
| 470 | + events.add(event); |
| 471 | + } |
| 472 | + }); |
| 473 | + this.context = application.run(); |
| 474 | + assertThat(events, hasItem(isA(ApplicationPreparedEvent.class))); |
| 475 | + assertThat(events, hasItem(isA(ContextRefreshedEvent.class))); |
| 476 | + } |
| 477 | + |
439 | 478 | @Test |
440 | 479 | public void registerShutdownHookOff() throws Exception { |
441 | 480 | SpringApplication application = new SpringApplication(ExampleConfig.class); |
@@ -551,6 +590,16 @@ static class ExampleConfig { |
551 | 590 |
|
552 | 591 | } |
553 | 592 |
|
| 593 | + @Configuration |
| 594 | + static class Multicaster { |
| 595 | + |
| 596 | + @Bean |
| 597 | + public SimpleApplicationEventMulticaster applicationEventMulticaster() { |
| 598 | + return new SimpleApplicationEventMulticaster(); |
| 599 | + } |
| 600 | + |
| 601 | + } |
| 602 | + |
554 | 603 | @Configuration |
555 | 604 | static class ExampleWebConfig { |
556 | 605 |
|
|
0 commit comments