|
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