Springboot 启动时执行方法
CommandLineRunner
Spring提供的这个接口表明,当它在一个Spring应用中时,应该被运行。
一个Spring应用中可以定义多个CommandLineRunner
,并且可以通过@Order
来指明它们的执行顺序。
ApplicationRunner
与CommandLineRunner
的作用是相同的。不同之处在于CommandLineRunner
接口的run()
方法接收String
数组作为参数,即是最原始的参数,没有做任何处理;而ApplicationRunner
接口的run()
方法接收ApplicationArguments
对象作为参数,是对原始参数做了进一步的封装。
当程序启动时,我们传给main()
方法的参数可以被实现CommandLineRunner
和ApplicationRunner
接口的类的run()
方法访问,即可接收启动服务时传过来的参数。
@PostConstruct
它是jdk为了影响servlet生命周期而提供的注解。
@PostConstruct
用于需要在依赖注入完成后才能被执行的方法。所有支持依赖项注入的类都必须支持此注释。即使类没有请求注入任何资源,也必须调用带有PostConstruct注释的方法。在给定的类中,只有一个方法可以用这个注释进行注释。
执行顺序:
Constructor >> @Autowired >> @PostConstruct
示例:
public Class AAA {
@Autowired
private BBB b;
public AAA() {
System.out.println("此时b还未被注入: b = " + b);
}
@PostConstruct
private void init() {
System.out.println("@PostConstruct将在依赖注入完成后被自动调用: b = " + b);
}
}
结论
两个都可以用来在项目启动后执行一些自定义方法。但是@PostContruct
多用于需要依靠其它类依赖注入的情况。
例如,项目启动后加载数据字典到缓存,用@PostContruct
。而有些时候需要加载一些第三方dll,这时候用CommandLineRunner
。