美文网首页我爱编程
Spring Boot 事件/监听机制

Spring Boot 事件/监听机制

作者: 52HzBoo | 来源:发表于2018-06-10 09:59 被阅读0次

    Spring 事件/监听

    ApplicationEvent: 应用事件
    ApplicationListener: 应用监听器

    Spring Boot 事件/监听

    • ApplicationEnvironmentPreparedEvent
    • ApplicationPreparedEvent
    • ApplicationStartingEvent
    • ApplicationReadyEvent
    • ApplicationFailedEvent

    ConfigFileApplicationListener

    管理配置文件,例如:

    • application.properties
    • application.yml
    • application-{profile}.yml

    Spring 上下文如何控制启动顺序

    • 实现Ordered 接口 以及类标识注解@Order
      1.默认最大优先级+10,在Spring里面,越小约优先。

    Spring Cloud 事件/监听

    • BootstrapApplicationListener
      1.负责加载bootstrap.properties或bootstrap.yml
      2.负责初始化Bootstrap跟节点: ApplicationContext ID = "bootstrap"
    # 跟节点默认叫bootstrap ,可以通过配置修改
    ConfigurableApplicationContext contex = builder.run();
    

    1.SpringApplication refresh 调用装配Bean
    2.SpringBoot通过AbstractApplicationContext 的refresh注入Beans

    AbstractApplicationContext

    public abstract class AbstractApplicationContext extends DefaultResourceLoader
            implements ConfigurableApplicationContext {
    ...
        @Override
        public void refresh() throws BeansException, IllegalStateException {
            synchronized (this.startupShutdownMonitor) {
                // Prepare this context for refreshing.
                prepareRefresh();
    
                // Tell the subclass to refresh the internal bean factory.
                ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
    
                // Prepare the bean factory for use in this context.
                prepareBeanFactory(beanFactory);
    
                try {
                    // Allows post-processing of the bean factory in context subclasses.
                    postProcessBeanFactory(beanFactory);
    
                    // Invoke factory processors registered as beans in the context.
                    invokeBeanFactoryPostProcessors(beanFactory);
    
                    // Register bean processors that intercept bean creation.
                    registerBeanPostProcessors(beanFactory);
    
                    /** 初始化消息源 **/
                    initMessageSource();
    
                    /** 初始化事件监听 **/
                    initApplicationEventMulticaster();
    
                    // Initialize other special beans in specific context subclasses.
                    onRefresh();
    
                    // Check for listener beans and register them.
                    registerListeners();
    
                    // Instantiate all remaining (non-lazy-init) singletons.
                    finishBeanFactoryInitialization(beanFactory);
    
                    // Last step: publish corresponding event.
                    finishRefresh();
                } catch (BeansException ex) {
                    if (logger.isWarnEnabled()) {
                        logger.warn("Exception encountered during context initialization - " +
                                "cancelling refresh attempt: " + ex);
                    }
    
                    // Destroy already created singletons to avoid dangling resources.
                    destroyBeans();
    
                    // Reset 'active' flag.
                    cancelRefresh(ex);
    
                    // Propagate exception to caller.
                    throw ex;
                } finally {
                    // Reset common introspection caches in Spring's core, since we
                    // might not ever need metadata for singleton beans anymore...
                    resetCommonCaches();
                }
            }
        }
    ...
    }
    

    相关文章

      网友评论

        本文标题:Spring Boot 事件/监听机制

        本文链接:https://www.haomeiwen.com/subject/aikfeftx.html