package com.xiaosq.projectx;
import org.springframework.beans.BeansException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.event.*;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.SmartApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
/**
* @author Morgan.L
* @version 1.0
* @date 2019/7/15 18:28
*/
public class MyTestApplicationListener implements EnvironmentPostProcessor, SmartApplicationListener, Ordered, ApplicationContextAware {
private int i = 0;
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void onApplicationEvent(ApplicationEvent event) {
i++;
if(event instanceof ApplicationStartingEvent) {
System.out.println("MyTestApplicationListener=>ApplicationStartingEvent" + i);
} else if(event instanceof ApplicationPreparedEvent) {
System.out.println("MyTestApplicationListener=>ApplicationPreparedEvent" + i);
} else if(event instanceof ApplicationReadyEvent) {
System.out.println("MyTestApplicationListener=>ApplicationReadyEvent" + i);
} else if(event instanceof ApplicationStartedEvent) {
//因为ApplicationStartedEvent extends ApplicationStartingEvent 所以这一行永远不会被执行
System.out.println("MyTestApplicationListener=>ApplicationStartedEvent" + i);
} else if(event instanceof ApplicationEnvironmentPreparedEvent) {
System.out.println("MyTestApplicationListener=>ApplicationEnvironmentPreparedEvent" + i);
} else if(event instanceof ApplicationFailedEvent) {
System.out.println("MyTestApplicationListener=>ApplicationFailedEvent" + i);
} else if(event instanceof SpringApplicationEvent) {
System.out.println("MyTestApplicationListener=>SpringApplicationEvent" + i);
} /*else if(event instanceof EmbeddedServletContainerInitializedEvent) {
System.out.println("MyTestApplicationListener=>EmbeddedServletContainerInitializedEvent" + i);
}*/ else if(event instanceof ContextRefreshedEvent) {
System.out.println("MyTestApplicationListener=>ContextRefreshedEvent" + i);
} else {
System.out.println("myTestApplication execute... onApplicationEvent" + event.getClass().toString() + i);
}
}
@Override
public boolean supportsSourceType(Class> sourceType) {
return true;
}
@Override
public int getOrder() {
return 0;
}
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
System.out.println("myTestApplication execute...postProcessEnvironment");
}
@Override
public boolean supportsEventType(Class extends ApplicationEvent> eventType) {
return true;
}
}
resources/META-INF/spring.factories
# Application Listeners
org.springframework.context.ApplicationListener=\
com.xiaosq.projectx.MyTestApplicationListener