本文主要是介绍[SpingBoot] 3个扩展点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 初始化器ApplicationContextInitializer
- 监听器ApplicationListener
- Runner: Runner的一般应用场景就是资源释放清理或者做注册中心, 因为执行到Runner的时候项目已经启动完毕了, 这个时候可以注册进注册中心。
文章目录
- 1.初始化器ApplicationContextInitializer
- 2.监听器ApplicationListener
- 3.callRunners
1.初始化器ApplicationContextInitializer
setXxxx() 一个是设置初始化器, 一个是设置监听器。
通过Spring SPI的方式查找这个类型的实现类。
public class MyApplicationContextInitializer implements ApplicationContextInitializer {@Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {System.out.println("MyApplicationContextInitializer");}
}
发现自己创建的ApplicationContextInitializer已经注册上来了。
调用了run()方法中的prepareContext()方法中的applyInitializers()方法, 在这个方法中for循环的调用各个初始化器的initialize()方法。
2.监听器ApplicationListener
ApplicationEventMulticaster发布事件, Listener监听事件。
定义了两个监听器, 为Started和Starting。
通过Spring SPI的方式查找这个类型的实现类。
public class MyStartedApplicationListener implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {System.out.println("MyStartedApplicationListener");}
}
public class MyStartingApplicationListener implements ApplicationListener<ApplicationStartingEvent> {@Overridepublic void onApplicationEvent(ApplicationStartingEvent event) {System.out.println("MyStartingApplicationListener");}
}
SpringApplication run()方法的listeners.starting()开始进去发送ApplicationStartingEvent广播事件, 由我们自己编写的事件监听器接收到。
3.callRunners
ApplicationRunner和CommandLineRunner。
Runner的一般应用场景就是资源释放清理或者做注册中心, 因为执行到Runner的时候项目已经启动完毕了, 这个时候可以注册进注册中心。
@Component
public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("run");}
}
这篇关于[SpingBoot] 3个扩展点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!