springBoot启动时让方法自动执行的几种实现方式

沙海 2021年4月7日12:30:14杂谈 Java评论20字数 1927阅读6分25秒阅读模式
摘要

速读摘要

速读摘要文章源自JAVA秀-https://www.javaxiu.com/9915.html

在初始化Web应用程序中的任何过滤器或servlet之前,将通知所有servletContextListener上下文初始化。在同一应用程序上下文中,可以使用有序接口或@order注释对其进行排序。文章源自JAVA秀-https://www.javaxiu.com/9915.html

原文约 531 | 图片 0 | 建议阅读 1 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/9915.html

springBoot启动时让方法自动执行的几种实现方式

GitHub笔记 文章源自JAVA秀-https://www.javaxiu.com/9915.html

来源:https://www.cnblogs.com/lsgspace/p/10508180.html文章源自JAVA秀-https://www.javaxiu.com/9915.html

在springBoot中我们有时候需要让项目在启动时提前加载相应的数据或者执行某个方法,那么实现提前加载的方式有哪些呢?接下来我带领大家逐个解答文章源自JAVA秀-https://www.javaxiu.com/9915.html

1.实现ServletContextAware接口并重写其setServletContext方法

@Componentpublic class TestStarted implements ServletContextAware {    /**     * 在填充普通bean属性之后但在初始化之前调用     * 类似于initializingbean的afterpropertiesset或自定义init方法的回调     *     */    @Override    public void setServletContext(ServletContext servletContext) {        System.out.println("setServletContext方法");    }}

注意:该方法会在填充完普通Bean的属性,但是还没有进行Bean的初始化之前执行文章源自JAVA秀-https://www.javaxiu.com/9915.html

2.实现ServletContextListener接口

/** * 在初始化Web应用程序中的任何过滤器或servlet之前,将通知所有servletContextListener上下文初始化。 */@Overridepublic void contextInitialized(ServletContextEvent sce) {    //ServletContext servletContext = sce.getServletContext();    System.out.println("执行contextInitialized方法");}

3.将要执行的方法所在的类交个spring容器扫描(@Component),并且在要执行的方法上添加@PostConstruct注解或者静态代码块执行

@Componentpublic class Test2 {    //静态代码块会在依赖注入后自动执行,并优先执行    static{        System.out.println("---static--");    }    /**     *  @Postcontruct’在依赖注入完成后自动调用     */    @PostConstruct    public static void haha(){        System.out.println("@Postcontruct’在依赖注入完成后自动调用");    }}

4.实现ApplicationRunner接口

/** * 用于指示bean包含在SpringApplication中时应运行的接口。可以定义多个applicationrunner bean * 在同一应用程序上下文中,可以使用有序接口或@order注释对其进行排序。 */@Overridepublic void run(ApplicationArguments args) throws Exception {    System.out.println("ApplicationRunner的run方法");}

4.实现CommandLineRunner接口

/** * 用于指示bean包含在SpringApplication中时应运行的接口。可以在同一应用程序上下文中定义多个commandlinerunner bean,并且可以使用有序接口或@order注释对其进行排序。 * 如果需要访问applicationArguments而不是原始字符串数组,请考虑使用applicationrunner。 *  */@Overridepublic void run(String... ) throws Exception {    System.out.println("CommandLineRunner的run方法");}
文章源自JAVA秀-https://www.javaxiu.com/9915.html

笔记版权归原作者所有,转载请注明出处 https://books.halfrost.com/leetcode/文章源自JAVA秀-https://www.javaxiu.com/9915.html

文章源自JAVA秀-https://www.javaxiu.com/9915.html
继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定