Spring应用上下文生命周期表示类
public interface Lifecycle {
/**
* 启动当前组件
*/
void start();
/**
*停止该组件
*/
void stop();
/**
* 检查此组件是否正在运行false时,start方法执行,true时,stop方法执行。
*/
boolean isRunning();
}
当ApplicationContext启动和停止时,spring容器将找出所有实现了LifeCycle的类,并调用其实现的方法。
LifecycleProcessor扩展Lifecycle增加刷新和关闭上下文方法
public interface LifecycleProcessor extends Lifecycle {
/**
* 响应Spring容器上下文 refresh
*/
void onRefresh();
/**
* 响应Spring容器上下文 close
*/
void onClose();
}
注意,没有显示的调用context的start()和close()方法,容器并不会调用生命周期的回调方法。
SmartLifecycle类可以自动调用
public interface SmartLifecycle extends Lifecycle, Phased {
/**
* 如果在调用refresh时,希望能够自动进行回调,则返回true,
* false的值表明组件打算通过显式的start()调用来启动,类似于普通的Lifecycle实现。
*/
boolean isAutoStartup();
void stop(Runnable callback);
}
Phased的getPhase()方法返回执行顺序,当开始时,getPhase()返回值最小的对象先开始,当停止时,遵循相反的顺序。
Spring事件监听机制
监听器
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
void onApplicationEvent(E event);
}
广播器SpringApplication本身也是一个事件发布器
public interface ApplicationEventMulticaster {
// 添加事件监听器
void addApplicationListener(ApplicationListener<?> listener);
// 添加事件监听器
void addApplicationListenerBean(String listenerBeanName);
// 移除指定事件监听器
void removeApplicationListener(ApplicationListener<?> listener);
// 移除指定事件监听器
void removeApplicationListenerBean(String listenerBeanName);
// 移除所有事件监听器
void removeAllListeners();
// 事件广播
void multicastEvent(ApplicationEvent event);
// 事件广播
void multicastEvent(ApplicationEvent event, @Nullable ResolvableType eventType);
}
springboot启动系统事件机制
事件名 作用
ApplicationStartingEvent 框架启动事件
ApplicationEnvironmentPreparedEvent 环境准备完毕事件
ApplicationContextInitializedEvent 上下文初始化
ApplicationPreparedEvent 上下文创建完毕,但是Bean还没有加载完毕
ApplicationStartedEvent bean 实例化完成,但是未调用 Runners接口
ApplicationReadyEvent 调用 Runners 接口完毕
ApplicationFailedEvent 启动失败事件
监听器注册
在 SpringApplication 初始化的时候就进行了监听器注册
setListeners((Collection)
getSpringFactoriesInstances(ApplicationListener.class));
监听器事件触发机制
run方法内
......
SpringApplicationRunListeners listeners = getRunListeners(args)
getSpringFactoriesInstances(SpringApplicationRunListener.class, types, this, args));
配置的是EventPublishingRunListener一个事件发布器
listeners.starting()
for (SpringApplicationRunListener listener : this.listeners) {
listener.starting();
调用EventPublishingRunListener的starting
@Override
public void starting() {
//initialMulticaster是new SimpleApplicationEventMulticaster()事件发布器
this.initialMulticaster.multicastEvent(new ApplicationStartingEvent(this.application, this.args));
}
}
......
public interface SpringApplicationRunListener {
default void starting() {}
default void environmentPrepared(ConfigurableEnvironment environment) {}
default void contextPrepared(ConfigurableApplicationContext context) {}
default void contextLoaded(ConfigurableApplicationContext context) {}
default void started(ConfigurableApplicationContext context) {}
default void running(ConfigurableApplicationContext context) {}
default void failed(ConfigurableApplicationContext context, Throwable exception){}
}
Springboot生命周期和事件处理
最新推荐文章于 2025-07-05 21:58:58 发布