springboot启动过程中常用的回调示例详解

网友投稿 310 2022-09-04


springboot启动过程中常用的回调示例详解

目录1.介绍2.常用的拓展接口3.实例:4.其他拓展接口:

1.介绍

springboot提供非常丰富回调接口,利用这些接口可以做非常多的事情,对于一些常用的回调接口进行介绍

2.常用的拓展接口

1.ApplicationContextInitializer2.ApplicationListener3.AuxMQboQCjspplicationRunner4.CommandLineRunner

3.实例:

1.ApplicationContextInitializer接口是在spring容器初初始化之前调用的

创建MyApplicationContextInitializer类实现ApplicationContextInitializer接口

public class Myhttp://ApplicationContextInitializer implements ApplicationContextInitializer {

@Override

public void initialize(ConfigurableApplicationContext applicationContext) {

System.out.println("MyApplicationContextInitializer启动。。。。。。。。。。");

}

}

因为该接口在容器初始化之前所以注解是没有用的,在mian方法中初始化MyApplicationContextInitializer类

@SpringBootApplication

public class Application {

public static void main(String[] args) {

SpringApplication springApplication = new SpringApplication(Application.class);

springApplication.addInitializers(new MyApplicationContextInitializer());

springApplication.run(args);

//SpringApplication.run(Application.class, args);

}

}

2.ApplicationListener监听器,这个接口可以根据不同的事件进行不同的触发条件

spring容器内置触发事件:

ContextRefreshedEvent:初始化或刷新ApplicationContext时引发的事件ContextStartedEvent:ApplicationContext启动时引发的事件ContextStoppedEvent:ApplicationContext停止时引发的事件ContextClosedEvent:ApplicationContext关闭时引发的事件

代码示例:

@Component

public class MyApplicationListener implements ApplicationListener {

@Override

public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {

System.out.println("MyApplicationListener。。。。。。。。。。");

}

}

注意:spring也有ApplicationEvent接口可以自定义事件

3.ApplicationRunner触发时

uxMQboQCJs

机在容器加载完之后

ublic class MyApplicationRunner implements ApplicationRunner {

@Override

public void run(ApplicationArguments args) throws Exception {

System.out.println("MyApplicationRunner。。。。。。。。。。");

}

}

源码:

/**

*用于指示 bean 包含在SpringApplication时应该运行的SpringApplication

*多个ApplicationRunner bean 可以在同一个应用程序上下文中定义,并且可以使用Ordered接口或@Order注释进行排序。

*/

public interface ApplicationRunner {

/**

* 传入的应用程序参数

*/

void run(ApplicationArguments args) throws Exception;

}

4.CommandLineRunner

功能基本与ApplicationRunner一致,区别在于,接口的参数类型,这里传递的是原始String 数组,拓展性ApplicationRunner会更好一点

@Component

public class MyCommandLineRunner implements CommandLineRunner {

@Override

public void run(String... args) throws Exception {

System.out.println("MyCommandLineRunner。。。。。。。。。。");

}

}

4.其他拓展接口:

1.InstantiationAwareBeanPostProcessor

添加实例化前回调的BeanPostProcessor子接口,以及实例化后但在设置显式属性或发生自动装配之前的回调。通常用于抑制特定目标 bean 的默认实例化,例如创建具有特殊 TargetSources 的代理(池目标、延迟初始化目标等),或实现其他注入策略,如字段注入。注意:此接口为专用接口,主要供框架内部使用。 建议尽可能实现普通的BeanPostProcessor接口,或者从InstantiationAwareBeanPostProcessorAdapter派生,以屏蔽对该接口的扩展。

2.SmartInstantiationAwareBeanPostProcessor

InstantiationAwareBeanPostProcessor接口的扩展,添加了用于预测已处理 bean 的最终类型的回调。注意:此接口为专用接

口,主要供框架内部使用。 通常,应用程序提供的后处理器应该简单地实现普通的BeanPostProcessor接口或派生自InstantiationAwareBeanPostProcessorAdapter类。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Python技能树共建】文件模块(Python核心技能树手册)
下一篇:1行python代码,实现PDF加密、解密 | python-offfice自动化办公,功能更新(python读取加密pdf)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~