在 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===================="); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论