SpringBoot启动时⾃动执⾏代码的⼏种实现⽅式
⽬录
前⾔
java⾃⾝的启动时加载⽅式
static代码块
构造⽅法
Spring启动时加载⽅式
代码测试
总结
前⾔
⽬前开发的SpringBoot项⽬在启动的时候需要预加载⼀些资源。⽽如何实现启动过程中执⾏代码,或启动
成功后执⾏,是有很多种⽅式可以选择,我们可以在static代码块中实现,也可以在构造⽅法⾥实现,也可以使⽤@PostConstruct注解实现。
当然也可以去实现Spring的ApplicationRunner与CommandLineRunner接⼝去实现启动后运⾏的功能。在这⾥整理⼀下,在这些位置执⾏的区别以及加载顺序。
java⾃⾝的启动时加载⽅式
static代码块
static静态代码块,在类加载的时候即⾃动执⾏。
构造⽅法
在对象初始化时执⾏。执⾏顺序在static静态代码块之后。
Spring启动时加载⽅式
@PostConstruct注解
PostConstruct注解使⽤在⽅法上,这个⽅法在对象依赖注⼊初始化之后执⾏。
ApplicationRunner和CommandLineRunner
SpringBoot提供了两个接⼝来实现Spring容器启动完成后执⾏的功能,两个接⼝分别为CommandLineRunner和ApplicationRunner。
这两个接⼝需要实现⼀个run⽅法,将代码在run中实现即可。这两个接⼝功能基本⼀致,其区别在于run⽅法的⼊参。ApplicationRunner的run⽅法⼊参为ApplicationArguments,为CommandLineRunner的run⽅法⼊参为String数组。
何为ApplicationArguments
官⽅⽂档解释为:
”Provides access to the arguments that were used to run a SpringApplication.
在Spring应⽤运⾏时使⽤的访问应⽤参数。即我们可以获取到SpringApplication.run(…)的应⽤参数。
Order注解
当有多个类实现了CommandLineRunner和ApplicationRunner接⼝时,可以通过在类上添加@Order注解来设定运⾏顺序。代码测试
为了测试启动时运⾏的效果和顺序,编写⼏个测试代码来运⾏看看。
TestPostConstruct
@Component
public class TestPostConstruct {
static {
System.out.println("static");
}
public TestPostConstruct() {
System.out.println("constructer");
}
@PostConstruct
public void init() {
System.out.println("PostConstruct");
}
}
TestApplicationRunner
@Component
@Order(1)
public class TestApplicationRunner implements ApplicationRunner{
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
System.out.println("order1:TestApplicationRunner");
}
}
TestCommandLineRunner
@Component
@Order(2)
springboot原理流程public class TestCommandLineRunner implements CommandLineRunner {
@Override
public void strings) throws Exception {
System.out.println("order2:TestCommandLineRunner");
}
}
执⾏结果
总结
Spring应⽤启动过程中,肯定是要⾃动扫描有@Component注解的类,加载类并初始化对象进⾏⾃动注⼊。加载类时⾸先要执⾏static静态代码块中的代码,之后再初始化对象时会执⾏构造⽅法。
在对象注⼊完成后,调⽤带有@PostConstruct注解的⽅法。当容器启动成功后,再根据@Order注解的顺序调⽤CommandLineRunner和ApplicationRunner接⼝类中的run⽅法。
因此,加载顺序为static>constructer>@PostConstruct>CommandLineRunner和ApplicationRunner.
到此这篇关于SpringBoot启动时⾃动执⾏代码的⼏种实现⽅式的⽂章就介绍到这了,更多相关SpringBoot启动⾃动执⾏代码内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论