当前位置: 代码网 > it编程>编程语言>Java > SpringBoot启动后执行方法的五种实现方式

SpringBoot启动后执行方法的五种实现方式

2025年02月14日 Java 我要评论
在 springboot 工程 启动后, 执行方法的五种方式:1、实现 commandlinerunner 接口项目初始化完毕后,才会调用方法,提供服务@componentpublic class s

在 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的大小顺序执行,小的先执行。

原理:

  1. springapplication 的run方法会执行afterrefresh方法。
  2. afterrefresh方法会执行callrunners方法。
  3. 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====================");
    }

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com