1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

SpringBoot实现项目启动时执行代码

SpringBoot实现项目启动时执行代码

你好,我是本际云服务器推荐网的小编小本本。在项目开发过程中,我们有时候需要在项目启动时预加载一些资源,例如提前加载某些数据、执行某个方法、初始化SQL脚本、提前实例化一些类等。那么,提前加载的方式有哪些呢?下面一一为大家介绍。

SpringBoot实现项目启动时执行代码

Java启动加载方式

Java启动加载方式包括static代码块、构造方法及PostConstruct注解,下面分别通过例子来讲解。

方式一:static代码块,通过static声明静态代码块,实现在类加载时自动加载。

方式二:构造方法,在对象初始化时自动执行。

方式三:PostConstruct注解,是Java提供的一个注解,用来修饰一个非静态的void()方法。被修饰的方法会在Spring加载Bean时运行,并且只会运行一次。

上述三种都是Java实现启动加载的方式。那么,他们之间的加载先后顺序如何呢?我们把这三种方式放到同一个类中测试下,可以看到加载的顺序依次为:static代码块->构造方法->PostConstruct注解。

Spring启动加载方式

Spring启动加载方式包括实现CommandLineRunner接口以及实现ApplicationRunner接口方式。

方式一:实现CommandLineRunner接口,是SpringBoot提供的接口。实现它需要实现run方法,在项目启动后执行的内容写在run方法中。

方式二:实现ApplicationRunner接口,同样也是SpringBoot提供的接口,实现方式和CommandLineRunner基本一致,区别在于入参不同,一个是String数组,一个是ApplicationArguments对象。

那么,它们两之间的加载顺序如何呢?经过测试,他们的加载顺序是由Spring容器加载Bean的顺序决定的。如果想自定义类的加载顺序,我们可以通过@Order注解来实现。该注解的作用是用来定义Spring容器中Bean执行顺序的优先级。需要注意的是,这里定义的是Bean的执行优先级,而不是Bean加载顺序。实际上Bean的加载顺序不受该注解影响。

总结:Spring应用启动过程中,Spring会扫描所有Bean,并且自动加载并初始化后注入。加载类时会执行static代码块,初始化对象时执行构造方法,对象注入后,会调用有@PostConstruct注解的方法。当容器启动完成后,会根据@Order注解顺序依次调用实现了ApplicationRunner和CommandLineRunner接口的run方法。

以上就是实现项目启动时执行方法的几种方式,我们可以在项目开发中灵活选用,根据不同场景使用不同方法。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6181.html