Spring服务启动后就执行某个方法

下边按照执行顺序前后,测试代码结果截图放到最后:

1、注解@PostConstruct

时间:当前bean被创建并且所有的依赖注入完成之后执行;

使用:当前bean 所在类内的某个方法上 添加该注解;该方法没有参数,返回值类型可以是void或任意其他类型。

2、实现InitializingBean

时间:当前bean被创建并且所有的依赖注入完成之后执行,在@PostConstruct之后;

使用:implements InitializingBean 重写 afterPropertiesSet() ,具体业务写在该方法内;

3、xml 配置bean: init-method

时间:当前bean被创建并且所有的依赖注入完成之后执行,在 afterPropertiesSet() 之后;

使用:xml中定义bean,指定 为 单例模式,且init-method参数值 设置为类内的一个方法名;

4、实现SmartInitializingSingleton(spring4.1及 以上)

时间:在 所有bean 初始化完成后 执行;

使用:implements SmartInitializingSingleton,重写afterSingletonsInstantiated(),具体业务写在该方法内;

一般 MQ、HTTP、监听器、定时任务   设置在此时启动;

5、实现ApplicationListener

时间:spring服务启动后 执行;

使用:implements ApplicationListener,重写onApplicationEvent(),具体业务写在该方法内;

6、springboot 启动类main方法

如果是springboot 项目就简单,在main方法SpringApplication.run(*****Application.class, args)之后写上业务逻辑。

时间:springBoot服务启动完成之后;

@Component
public class MyIInitializingBean implements InitializingBean {@Autowiredprivate StudentExportImpl studentExport;public MyIInitializingBean() {System.out.println("当前类的Bean初始化后:执行构造器方法完成,,,,");}@PostConstructpublic void myInitBean() {System.out.println("@Autowired 是否注入完成:"+ (studentExport != null ? "是":"否"));System.out.println("当前类的Bean初始化后:执行@PostConstruct注解的方法完成,,,,");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("当前类的Bean初始化后:执行实现InitializingBean接口重写的方法完成,,,,");}}
@Component
public class MySmartInitiailzingSingleton implements SmartInitializingSingleton {@Overridepublic void afterSingletonsInstantiated() {System.out.println("所有bean初始化完成后:执行实现SmartInitializingSingleton接口重写的方法完成,,,,,,");}
}
@Component
public class MyAppliactionListener implements ApplicationListener {@Overridepublic void onApplicationEvent(ApplicationEvent applicationEvent) {// 保证执行一次: 在root application context 初始化完成后调用if(((ServletWebServerInitializedEvent) applicationEvent).getApplicationContext().getParent() == null) {System.out.println("spring服务启动后:执行实现ApplicationListener接口重写的方法完成,,,,");}}
}
@SpringBootApplication
public class *****Application {public static void main(String[] args) {System.out.println("SpringBoot 开始启动,,,main方法开始执行,,,,");SpringApplication.run(*****Application.class, args);System.out.println("SpringBoot 已启动,,,main方法已执行完,,,,");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索移动云服务:构建高效移动互联网应用的最佳实践

一、移动云服务简介 官网:https://ecloud.10086.cn 移动云,或称为移动云计算,是通过无线网络向移动设备用户提供云计算服务的技术。它使用户能够通过智能手机、平板电脑和笔记本电脑等各类移动设备,在任何时间、任何地点便捷地访…

小程序怎么改名

经常有商家想要对自己的小程序进行重命名,改名可能是为了更好地与品牌形象以及业务相匹配,也可能是为了更好地吸引用户。那么如何才能更名呢? 一、准备几个新名字。 在决定改名之前,首先要确定几个新的小程序名字。为什么要准备…

帝国CMS如何修改时间格式,变成几分钟,几小时教程

该插件已经在帝国cms6.6上测试通过&#xff0c;至于其他版本&#xff0c;请自行测试。 目前支持&#xff1a;标签模板&#xff0c;列表模板&#xff0c;内容模板 安装说明&#xff1a; 把以下的内容复制到 /e/class/userfun.php 文件里&#xff08;放在<?php和?>之间…

自定义类型:结构体详解

1.结构体 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。一个整型数组&#xff0c;它的每个数组元素只能是整型&#xff0c;字符型的数组它的每个元素只能是字符型。但是结构体的每个成员可以是各种不同类型的变量。 1.2结构的声明 //声明 struct t…

孜然多程序授权系统V2.0开源

源码介绍 孜然一款多程序授权系统&#xff0c;支持自定义权限价格/新增程序配置等支持自动生成授权代码在线签到在线充值多支付接口IP/域名云黑文章系统&#xff08;富文本编辑器&#xff09;卡密功能一键云黑&#xff08;挂个大马/一键黑页/一键删库/一键删源码&#xff09; …

批处理作业调度问题 (回溯法)

目录 一、问题解析 二、实例剖析 三、算法思路 四、代码实现 结果&#xff1a; 总结 前言 【问题】n 个作业{1, 2, …, n}要在两台机器上处理&#xff0c;每个作业必须先由机器 1 处理&#xff0c;再由机器 2 处理&#xff0c;机器 1 处理作业i所需时间为 ai&#xff0c;…

【Linux-时间管理和内核定时器】

Linux-时间管理和内核定时器 ■ 设置系统节拍率■ 高节拍率和低节拍率的优缺点&#xff1a;■ jiffies 系统节拍数■ get_jiffies_64 这个函数可以获取 jiffies_64 的值■ 处理绕回■ 使用 jiffies 判断超时 ■ jiffies 和 ms、 us、 ns 之间的转换函数在这里插入代码片■ 内核…

QT常量中有换行符

头文件添加&#xff1a; #pragma execution_character_set("utf-8")

Java中的类加载器

类加载器 1.什么是类加载器&#xff1f; 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;&#xff1a;这是JVM自带的类加载器&#xff0c;负责加载Java的核心类库&#xff0c;如rt.jar等。由于安全原因&#xff0c;启动类加载器加载的类不能被其他类加载器加载的类…

数据库(8)——DML数据操作

增添数据 给指定字段添加数据 INSERT INTO 表名 (字段名1&#xff0c;字段名2,...)VALUES(值1,值2...); 没有的添加的字段默认为NULL。 给全部字段添加数据 INSERT INTO 表名 VALUE (值1,值2,....值n); 此时值的顺序对应表中字段的顺序 批量添加数据 INSERT INTO 表名(字段1,…

ssm143校园一卡通系统软件的设计与实现+jsp

校园一卡通系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园一卡通系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间…

聊聊变异测试

软件质量保障 所寫即所思&#xff5c;一个阿里质量人对测试的所感所悟。 1. 介绍 有句话说&#xff1a;证实容易&#xff0c;证伪难。正如测试一样&#xff0c;证明缺陷存在容易&#xff0c;但证明不存在缺陷难。而变异测试颠覆了这一原则&#xff0c;如果我们知道存在缺陷&am…

CAD二次开发(6)-用户交互之选择集

1. 简单测试 测试让选中的图形描红 [CommandMethod("SeleDemo")]public void SeleDemo(){Database db HostApplicationServices.WorkingDatabase;Editor ed Application.DocumentManager.MdiActiveDocument.Editor;PromptSelectionResult psr ed.GetSelection();…

如何学到数据库从入门到入土(MySQL篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

mars3d的V2版本的Video2D与V3版本的Video2D实现数据快速迁移

场景&#xff1a; 目前是v2和v3的两个相机视角的不同格式&#xff0c;在Mars3d的V2的旧数据想可以快速迁移到V3版本。 V2版本的数据&#xff1a; {"camera": {"fov": 1.0471975511965976,"dis": 20,"stRotation": 0,"showFrust…

基于小波分析和机器学习(SVM,KNN,NB,MLP)的癫痫脑电图检测(MATLAB环境)

癫痫是一种由大脑神经元突发性异常放电导致的大脑功能性障碍疾病。据世界卫生组织统计&#xff0c;全球约有7000万人患有癫痫。癫痫患者在发病时呈现肌肉抽搐、呼吸困难、意识丧失等症状。由于癫痫发作的偶然性&#xff0c;患者极有可能在高空、驾驶、游泳等危险情况下发病并丧…

2024最新 Jenkins + Docker实战教程(二) - Jenkins相关配置

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

C语言代码错误(一)

今天在写选择排序代码时&#xff0c;在测试数据发现不能显示结果 1、代码如下&#xff1a; #include <stdio.h>int main(void) {int i, j; // 循环变量int MinIndex; // 保存最小的值的下标int buf; // 互换数据时的临时变量int n;printf("你想输入多少个数据n:\n…

C++之lambda函数与std::bind区别及用法实例(二百八十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

LabVIEW如何实现多张图拼接

在LabVIEW中实现相机多次拍摄进行拼接的过程&#xff0c;可以分为以下几个步骤&#xff1a;设置相机参数、控制相机拍摄、图像处理与拼接、显示和保存结果。以下是一个详细的实现方案&#xff1a; 1. 设置相机参数 首先需要配置相机的参数&#xff0c;例如分辨率、曝光时间、…