【SpringBoot】 启动后会调用执行的方法的 (五种方式)
在 SpringBoot 工程 启动后, 会调用执行方法的五种方式:
亲自测试, 按照执行顺序如下:
第一种:
@Component
public class SpringContext1 {
@PostConstruct
public void pingStart(){
System.out.println("@PostConstruc方法开始执行");
}
} 第二种:
@Component
public class SpringContextUtils implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("implements ApplicationContextAware方法开始执行啦");
}
} 第三种(会执行多次):
@Component
public class SpringContext2 implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
System.out.println("implements ApplicationListener方法开始执行");
}
} 第四种:
@Component
public class SpringContext4 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("implements ApplicationRunner");
}
} 第五种:
@Component
public class SpringContext3 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("implements CommandLineRunner");
}
}
1、测试如下:
package com.example.apidemo.java.spring; import javax.annotation.PostConstruct;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component; /*
* 如果监听的是 ApplicationStartedEvent 事件,则 ApplicationListener 一定会在 CommandLineRunner 和 ApplicationRunner 之前执行;
* 如果监听的是 ApplicationReadyEvent 事件,则 ApplicationListener 一定会在 CommandLineRunner 和 ApplicationRunner 之后执行;
* 顺序: 默认是 ApplicationRunner 先执行,如果双方指定了@Order 则按照 @Order的大小顺序执行,小的先执行。 * 原理:
* SpringApplication 的run方法会执行afterRefresh方法。
* afterRefresh方法会执行callRunners方法。
* callRunners方法会调用所有实现ApplicationRunner和CommondLineRunner接口的方法callRunners方法会调用所有实现ApplicationRunner和CommondLineRunner接口的方法
*/ @Component
public class SpringContact {
} /*1、@PostConstruct 注解在项目初始化过程中,就会调用此方法。如果业务逻辑执行很耗时,可能会导致项目启动失败。*/
@Component
class StartInit { @PostConstruct
public void init() {
System.out.println("1====>>>> @PostConstruct 注解的方法将在该实例化过程完成后立即执行, init 方法中的输出语句会在项目初始化过程中被调用打印");
}
} /*2、实现 InitializingBean 接口,项目启动时,调用此方法*/
@Component
class StartInit6 implements InitializingBean {
@Override
public void afterPropertiesSet() {
System.out.println("2====>>>>项目启动时,调用此方法 InitializingBean ");
}
} /*3、实现 ApplicationListener 接口项目初始化完毕后,才会调用方法,提供服务。注意监听的事件,
通常是 ApplicationStartedEvent 或者 ApplicationReadyEvent,其他的事件可能无法注入 bean。*/
@Component
class StartInit4 implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("3====>>>>项目初始化完毕后 调用ApplicationStartedEvent");
}
} /*4、实现 ApplicationRunner 接口同 CommandLineRunner。只是传参格式不一样。
org.springframework.boot.CommandLineRunner:没有任何限制;
org.springframework.boot.ApplicationRunner:key-value*/
@Component
class StartInit3 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) {
System.out.println("4====>>>>调用ApplicationRunner");
}
} /*5、实现 CommandLineRunner 接口项目初始化完毕后,才会调用方法,提供服务*/
@Component
class StartInit2 implements CommandLineRunner {
@Override
public void run(String... args) {
System.out.println("5====>>>>项目初始化完毕后 调用CommandLineRunner");
}
}
【SpringBoot】 启动后会调用执行的方法的 (五种方式)的更多相关文章
- uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...
- Java项目启动时执行指定方法的几种方式
很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等.这里给出几种解决方案供大家参考. 1. 使用@PostConstruct注解 这个注解呢,可以在 ...
- WINDOWS硬件通知应用程序的常方法(五种方式:异步过程调用APC,事件方式VxD,消息方式,异步I/O方式,事件方式WDM)
摘要:在目前流行的Windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口.为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,详细说明每种方法的原理和实现过程,并 ...
- Java调用.NET webservice方法的几种方式
最近做项目,涉及到web-service调用,现学了一个星期,现简单的做一个小结.下面实现的是对传喜物流系统(http://vip.cxcod.com/PodApi/GetPodStr.asmx?ws ...
- Activity启动过程中获取组件宽高的五种方式
第一种:(重写Activity的onWindowFocusChanged方法) /** * 重写Acitivty的onWindowFocusChanged方法 */ @Override public ...
- springboot启动后自动退出
有时新建的springboot启动后自动退出运行,如图所示: 此种情况大都数是因为pom文件加入了tomcat的依赖,与springboot内嵌的tomcat冲突导致,所以只需将pom文件中的tomc ...
- Android-WebView与本地HTML (Java调用--->HTML的方法)-(new WebView(this)方式)
之前的博客,Android-WebView与本地HTML (Java调用--->HTML的方法),是在 findViewById(R.id.webview);,来得到WebView, 此博客使用 ...
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
js replace 全局替换 js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...
- 操作系统+编程语言的分类+执行python程序的两种方式+变量
1.什么是操作系统? 操作系统就是一个协调\管理\控制计算机硬件资源与软件资源的一个控制程序. 2.为何要操作系统? a.把复杂的硬件操作封装成简单的功能\接口用来给用户或者程序来使用(文件) b.把 ...
- Java执行groovy脚本的两种方式
记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocab ...
随机推荐
- IDEA:自动生成方法注释并添加 @param 参数(Java+Kotlin)
在用 Java 或 Kotlin 编写方法时建议编写完善的注释,包含每个参数的意义和返回的内容,下面介绍在 IDEA 中自动生成方法注释的技巧. 第二张图按照图片填写就好了 ③(注意是*不是/*) * ...
- jmeter工具中vars与props命令的区别和使用
话不多说直接干活!!!!! vars 和 props命令存在于"jsr223 预处理器"."BeanShell 预处理程序"."JSR223 后置处理 ...
- oracle、达梦数据库、MySQL数据创建表与字段注释
/**1.oracle注释*//*表本身注释*/comment on table 表名 is '注释信息';/*字段注释*/comment on column 表名.字段名 is '注释信息';/*实 ...
- 给祖传系统做了点 GC调优,暂停时间降低了 90%
问题描述 公司某规则引擎系统,在每次发版启动会手动预热,预热完成当流量切进来之后会偶发的出现一次长达1-2秒的Young GC(流量并不大,并且LB下的每个节点都会出现该情况) 在这次长暂停之后,每一 ...
- HDU 1108
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 华企盾DSC邮件发送成功,但是不解密也没有任何提示(未添加白名单)
用Debugview监控整个过程,若日志中有信任邮箱未添加说明,白名单邮箱未添加或者添加错了(检查空格之类的或重新添加)
- 【Python】【OpenCV】【NumPy】图像和原始字节的转换
学习完基础的图像算法,开始接触OpenCV学习: 灰度图中,一个像素点上的灰度级需要一个字节(byte,2^8,8 bit)进行存储,此时的灰度图是二维的.而当我们需要转换为彩色图时,即三维,便会产生 ...
- TiDB故障处理之让人迷惑的Region is Unavailable
背景 最近某集群扩容了一批物理机,其中 TiKV 节点有6台机器12个实例,同时调整了 label 设置增加了一层机柜级容灾.因为前期做了比较充分的准备工作,到了变更窗口只等着执行scale-out就 ...
- spring是否线程安全
spring 管理的bean默认是单例的,可通过 scope 属性设置scope="singleton" 默认是单例,可修改为scope="prototype" ...
- MinIO客户端之mb
MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc mb MinIO对象锁定 桶版本控制 桶复制 站点复制概述 创建桶bkt1,命令如下: ./mc mb lo ...