Springboot生命周期和事件处理

	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);

		}
		PhasedgetPhase()方法返回执行顺序,当开始时,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){}
		}

你可能感兴趣的:(java,spring,boot,java,后端)