首页 > 其他分享 >SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBean 、@PostConstruct区别

SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBean 、@PostConstruct区别

时间:2023-05-17 15:55:43浏览次数:51  
标签:InitializingBean CommandLineRunner SpringBoot void PostConstruct Order Applicati

0、参考、业务需求

1、方式

  • 实现 ApplicationRunner 接口
  • 实现 CommandLineRunner 接口
  • 实现 InitializingBean 接口
  • 使用 @PostConstruct 标签

2、@Order

  • 可以使用@Order注解或Ordered接口改变 ApplicationRunner 和 CommandLineRunner执行顺序
  • @Order 对 InitializingBean 和 @PostConstruct 不生效。

3、测试使用

  • ApplicationRunner
@Component
@Order(3)
public class App01 implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("App01_执行了……@Order(3)");
    }

}

@Component
@Order(2)
public class App02 implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("App02_执行了……@Order(2)");
    }
    
}
  • CommandLineRunner
@Component
@Order(1)
public class Com01 implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Com01_执行了……@Order(1)");
    }

}

@Component
@Order(0)
public class Com02 implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Com02_执行了……@Order(0)");
    }

}
  • InitializingBean
/** @Order没用
 * @author CC
 * @since 2023/5/17 0017
 */
@Component
@Order(7)
public class Ini01 implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Ini01_执行了……@Order(7)");
    }

}

/** @Order没用
 * @author CC
 * @since 2023/5/17 0017
 */
@Component
@Order(4)
public class Ini02 implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Ini02_执行了……@Order(4)");
    }

}
  • @PostConstruct
/** @Order没用
 * @author CC
 * @since 2023/5/17 0017
 */
@Component
@Order(6)
public class Pos01 {

    @PostConstruct
    public void customizeName(){
        System.out.println("Pos01_执行了……@Order(6)");
    }
    
}

/** @Order没用
 * @author CC
 * @since 2023/5/17 0017
 */
@Component
@Order(5)
public class Pos02 {

    @PostConstruct
    public void customizeName(){
        System.out.println("Pos02_执行了……@Order(5)");
    }
    
}

4、执行顺序、建议使用


  • 通过实现得出执行顺序
InitializingBean > @PostConstruct > ApplicationRunner > CommandLineRunner
  • 没有执行顺序要求,使用:@PostConstruct
  • 有执行顺序要求,使用:ApplicationRunner(推荐)或者CommandLineRunner

标签:InitializingBean,CommandLineRunner,SpringBoot,void,PostConstruct,Order,Applicati
From: https://www.cnblogs.com/kakarotto-chen/p/17409006.html

相关文章

  • SpringBootWeb案例 —— ①
     ......
  • 【小小demo】SpringBoot+Layui登录
    easy-login基于layui注册、登录简单实现,并他通过拦截器拦截未登录请求。项目地址文章末尾登录拦截器SystemInterceptorpreHandle在Controller之前执行,因此拦截器的功能主要就是在这个部分实现:检查session中是否有user对象存在;如果存在,就返回true,那么Controller就......
  • SpringBoot配置两个一样的Bean,区分两个配置类
    1、@Primary作用:指定默认bean。当没有根据名字显示要注入哪个bean的时候,默认使用打了@Primary标签的bean2、配置两个一样的bean@ConfigurationpublicclassMyThymeLeafConfig{@ResourceprivateApplicationContextapplicationContext;/**自定义的bea......
  • SpringBoot的@Autowired和@Resource使用
    1、区别见:https://blog.csdn.net/xhbzl/article/details/1267658932、使用2.1、注入配置类比如注入config的bean@ConfigurationpublicclassMyThymeLeafConfig{@ResourceprivateApplicationContextapplicationContext;/**自定义的bean*/......
  • springboot中使用application.properties配置mysql和sqlserver
    1.使用依赖*mysql:<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>*sqlserver:<dependency><groupId>com.microsoft.sqlserver</groupId><art......
  • SpringBoot学习笔记--系列文章
    随笔分类 -  SpringBootSpringBoot学习笔记(八)——JWT、(Vue3、Axios、Vue-Router、TypeScript实现授权与验证示例)SpringBoot学习笔记(七)——综合示例BookStore图书管理系统SpringBoot学习笔记(六)——分页、跨域、上传、定制banner、Lombok、HutoolSpringBoot学习......
  • SpringBoot拦截器
    在项目的开发中,在某些情况下,我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。 上面的图是Spring中拦截机制,请求从Filter-->>Controller的过程中,只要在指定的环节出现异常,可以通过对应的机制进行处理。反之在任何一个环节......
  • SpringBoot(10.1) -- AOP
    SpringBoot的AOP的2种实现方式基于SpringBoot的AOP写法spring.aop.auto=true#是否启用aopspring.aop.proxy-target-class=false#false(默认)代理方式有接口使用jdk动态代理,true强制使用cglib代理。基于SpringBoot做法@EnableAopProxyClassexposeProxy属性表示如......
  • SpringBoot使用EasyExcel将Excel数据直接转换为类对象
    背景相比于读取excel到List<List<String>>对象中,抽象一个方法将excel数据直接一步读取到指定的类对象中,更为方便。代码通过类Class读取excel数据到对象/***使用Class来读取Excel**@paraminputStreamExcel的输入流*@paramexcelTypeEnumExcel的格式(XLS或XLSX......
  • SpringBoot整合knife4j
    ●knife4j是一个集Swagger2和PoenApi为一体的增强解决方案导入依赖<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>编写相关配置类......