在 springboot 工程 启动后, 执行方法的五种方式:
1、实现 commandlinerunner 接口
项目初始化完毕后,才会调用方法,提供服务
@component
public class startinit2 implements commandlinerunner {
@override
public void run(string... args) throws exception {
system.out.println("commandlinerunner====================");
}
}2、实现 applicationrunner 接口
同 commandlinerunner。只是传参格式不一样。commandlinerunner:没有任何限制;applicationrunner:key-value
@component
public class startinit3 implements applicationrunner {
@override
public void run(applicationarguments args) {
system.out.println("applicationrunner=================");
}
}3、实现 applicationlistener 接口
项目初始化完毕后,才会调用方法,提供服务。注意监听的事件,通常是 applicationstartedevent 或者 applicationreadyevent,其他的事件可能无法注入 bean。
@component
public class startinit4 implements applicationlistener<applicationstartedevent> {
@override
public void onapplicationevent(applicationstartedevent event) {
system.out.println("applicationlistener================applicationstartedevent");
}
}- 如果监听的是
applicationstartedevent事件,则 applicationlistener 一定会在 commandlinerunner 和 applicationrunner 之前执行; - 如果监听的是
applicationreadyevent事件,则 applicationlistener 一定会在 commandlinerunner 和 applicationrunner 之后执行;
顺序:
默认是 applicationrunner 先执行,如果双方指定了@order 则按照 @order的大小顺序执行,小的先执行。
原理:
- springapplication 的run方法会执行afterrefresh方法。
- afterrefresh方法会执行callrunners方法。
- callrunners方法会调用所有实现applicationrunner和commondlinerunner接口的方法callrunners方法会调用所有实现applicationrunner和commondlinerunner接口的方法
4、@postconstruct 注解
在项目初始化过程中,就会调用此方法。如果业务逻辑执行很耗时,可能会导致项目启动失败。
@component
public class startinit {
@postconstruct
public void init() {
system.out.println("@postconstruct===============================");
}
}5、实现 initializingbean 接口
项目启动时,调用此方法
@component
public class startinit6 implements initializingbean {
@override
public void afterpropertiesset() {
system.out.println("initializingbean====================");
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论