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启动过程中的事件监听器)
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); } }
当然我们也可以用事件监听器中执行这个操作。灵活多变吧
出处:https://www.cnblogs.com/gne-hwz/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任