SpringBoot启动过程中涉及到了扩展接口

 

1、ApplicationListener接口

2、上下文环境配置文件扩展:EnvironmentPostProcessor (重要)

3、ApplicationContextInitializer接口 上下文初始化器

4、BeanFactoryPostProcessor接口 对BeanFactory操作了后置处理器 (重要)

5、Aware接口及其子接口
会在refreshContext()方法中实例化所有bean实例,调用Aware子接口的接口方法。用来获取Spring启动时相关的对象,在项目启动后需要用到时直接调用

6、BeanPostProcessor接口
用于bean初始化方法init-method调用前后进行处理。

7、ApplicationRunner和CommandLineRunner接口

 

需求:

1、需要所有bean实例化完成后,我要把含有@xxxx注解的所有bean找出来,统一做某一逻辑。

方法1、实例化完成后的事件时 ContextRefreshedEvent 事件触发时, 所有bean已经实例化完成。

  我们可以在这个地方获取到ApplicationContext类,获取到beanFactory,再获取到注解对应bean列表

方法2、通过ApplicationStartedEvent 事件来获取

方法3、通过实现ApplicationRunner接口的run()方法执行逻辑,这个会在ApplicationStartedEvent 事件之后执行。

 

 

 

 

 

1、ApplicationListener接口,是用来Spring事件的事件监听器接口。

详细资料:

SpringBoot扩展接口- ApplicationListener 事件监听器

https://www.cnblogs.com/gne-hwz/p/15294532.html

 

 2、上下文环境配置文件扩展

扩展方式有:

SpringBoot启动过程-加载配置文件原理:

https://i.cnblogs.com/posts/edit;postId=15292789

1、实现EnvironmentPostProcessor接口
2、定义PropertySourceLoader接口,自定义加载配置文件(不建议使用)
3、使用注解@PropertySource加载配置文件属性源

1、EnvironmentPostProcessor接口

会在ApplicationEnvironmentPreparedEvent事件中触发

2、PropertySourceLoader 接口 (不推荐)

 

3、 SpringBoot扩展接口-SpringApplicationInitializer 初始化器

详细链接:https://www.cnblogs.com/gne-hwz/p/15293879.html

ApplicationContextInitializer 接口

一般用来设置上下文ApplicationContext配置

1、添加自定义事件监听器(非SpringBoot启动过程中的事件监听器)

2、添加BeanFactory的后置处理器 (一般不在这里添加,使用声明Bean类方式添加)

 

 

4、BeanFactoryPostProcessor接口

SpringBoot扩展接口- BeanFactoryPostProcessor后置处理器

详细地址:https://www.cnblogs.com/gne-hwz/p/15294630.html

功能:

1、实现注册器接口方法,将自定义bean注册到beanFactory中

2、实现规则处理器,在所有注册器处理完成后,对BeanFactory进行扩展。

 

5、Aware接口及其子接口

6、BeanPostProcessor接口

详细资料地址:

SpringBoot扩展接口- Bean实例化前后扩展点

https://www.cnblogs.com/gne-hwz/p/15305801.html

 

相当于bean初始化方法调用前后的拦截器

会在Bean的初始化方法init-method调用前后进行处理

BeanPostProcessor.postProcessBeforeInitialization(Object bean, String beanName) 初始化前调用
BeanPostProcessor.postProcessAfterInitialization(Object bean, String beanName)    初始化后调用

 

8、ApplicationRunner和CommandLineRunner接口

是在ApplicationStartedEvent事件之后,触发ApplicationReadyEvent事件之前调用

用于执行启动后的操作。

比如我自定义的@EventBusListener注解到bean上,我要在所有bean初始化后获取到这个bean列表注册到我的事件中心,用于单机应用的异步事件订阅发布执行

@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        EventBusCenter eventBusCenter = SpringContextUtils.getBean(EventBusCenter.class);
        // 获取所有带有 @EventBusListener 的 bean,将他们注册为监听者
        Map<String, Object> beansWithAnnotation = SpringContextUtils.getApplicationContext().getBeansWithAnnotation(EventBusListener.class);
        List<Object> listeners = beansWithAnnotation.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());
        eventBusCenter.registry(listeners);
    }
}

当然我们也可以用事件监听器中执行这个操作。灵活多变吧

 

posted @ 2021-03-02 18:49  海绵般汲取  阅读(534)  评论(0编辑  收藏  举报