Java 了解弹簧靴&x27;s应用程序生命周期和启动侦听器

Java 了解弹簧靴&x27;s应用程序生命周期和启动侦听器,java,spring-boot,Java,Spring Boot,在Sprint Boot 2.x中,我们可以使用以下两种方法之一初始化应用程序: @springboot应用程序 公共类MyApp{ 公共静态void main(字符串[]args){ 运行(MyApp.class,args); init(); } 私有void init(){ //从这里初始化应用程序。。。 } } 或者我们可以使用启动时执行的启动侦听器: 公共类StartupListener实现ApplicationListener{ @凌驾 ApplicationEvent(Contex

在Sprint Boot 2.x中,我们可以使用以下两种方法之一初始化应用程序:

@springboot应用程序
公共类MyApp{
公共静态void main(字符串[]args){
运行(MyApp.class,args);
init();
}
私有void init(){
//从这里初始化应用程序。。。
}
}
或者我们可以使用启动时执行的启动侦听器:

公共类StartupListener实现ApplicationListener{
@凌驾
ApplicationEvent(ContextRefreshedEvent事件)上的公共无效{
//从这里初始化应用程序。。。
}
}

我想知道采取这两种方法存在哪些权衡。我对SpringBoot的“应用程序生命周期”了解不多,我想知道在这两种设置中是否有我可以/无法访问的内容。提前谢谢

仅在启动后调用
init
方法,并且仅在将应用程序作为命令行程序运行时调用该方法


例如,将应用程序部署为.war文件时,不会调用
init
方法

每当启动时都会调用onApplicationEvent的
方法,该方法在启动期间确实发生,但稍后可以再次调用。参见例如“


对于与
init
方法更相似的事件,请使用。

您确定没有
@PostConstruct
注释的init方法吗?@AlexeyUsharovski注意到
init
方法是由
main
方法显式调用的。如果是这样,我认为这不是初始化Spring boot应用程序的好方法。不知道
run
方法何时返回。最好将
init
公开,并用
@PostConstruct
@AlexeyUsharovski注释您在这里谈论的
run
方法是什么?
SpringApplication.run