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

news2025/3/18 10:03:17

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

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 {

    @Autowired
    private StudentExportImpl studentExport;

    public MyIInitializingBean() {
        System.out.println("当前类的Bean初始化后:执行构造器方法完成,,,,");
    }

    @PostConstruct
    public void myInitBean() {
        System.out.println("@Autowired 是否注入完成:"+ (studentExport != null ? "是":"否"));
        System.out.println("当前类的Bean初始化后:执行@PostConstruct注解的方法完成,,,,");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("当前类的Bean初始化后:执行实现InitializingBean接口重写的方法完成,,,,");
    }

}
@Component
public class MySmartInitiailzingSingleton implements SmartInitializingSingleton {
    @Override
    public void afterSingletonsInstantiated() {
        System.out.println("所有bean初始化完成后:执行实现SmartInitializingSingleton接口重写的方法完成,,,,,,");
    }
}
@Component
public class MyAppliactionListener implements ApplicationListener {
    @Override
    public 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.coloradmin.cn/o/1694551.html

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

相关文章

Parasoft C++Test软件静态分析操作指南_编码规范/标准检查

系列文章目录 Parasoft CTest软件安装指南 Parasoft CTest软件静态分析操作指南_编码规范/标准检查 Parasoft CTest软件静态分析操作指南_软件质量度量 Parasoft CTest软件静态分析_自动提取静态分析数据生成文档 Parasoft CTest软件单元测试_操作指南 Parasoft CTest软件单元…

SQL分类——DDL(数据定义语言)

一、DDL(数据定义语言) (1)DDL——数据库——操作的相关语法: 查询 可以一次性查询当前数据库服务器中所有的数据库: SHOW DATABASES; 查询当前所处的数据库: SELECT DATABASE(); 创建 一般最简…

基于FPGA的函数信号发生器设计

本科时期的一个课设,现在将他分享出来,写了很详细的文章,可以直接拿去使用:设计采用波形查找表和相位累加器的方法实现DDS,查找表的数据位宽为8位,采样点数为4096。波形产生范围是100Hz-20MHz,最…

上位机图像处理和嵌入式模块部署(mcu定时器配置)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在mcu开发过程当中,有一种开发模式用的比较多,那就是中断while(1)。这里面的中断,又是以…

力扣96. 不同的二叉搜索树

Problem: 96. 不同的二叉搜索树 文章目录 题目描述思路复杂度Code 题目描述 思路 一个数字做根节点的话可能的结果为:其左边数字做子树的组合数字乘以其右边数字做子树的个数之积 1.创建备忘录memo; 2.递归分别求取当前数字左边和右边数字做子树的数量&…

【C++入门】—— C++入门 (中)_引用

前言:了解了什么是C,我们进入了C入门知识的命名空间,现在我们接着来讲剩下的C入门知识讲解。 如果前面还有什么不懂的只是不妨仔细阅读上一篇: C入门知识 (命名空间) 本篇主要内容: 缺省参数 函数重载 引用 C入门 1. …

19c数据库19.9以下dg切换打开hang住问题

原主库发起切换请求,原主库正常切换数据库角色,但原从库无法正常打开数据库,尝试关闭重启,依旧无法解决问题。 查看切换过程中原从库数据库后台日志,发现数据库一直不断重试清理 SRLs, 后台alert日志&…

【力扣刷题笔记第三期】Python 数据结构与算法

先从简单的题型开始刷起,一起加油啊!! 点个关注和收藏呗,一起刷题鸭!! 第一批题目 1.设备编号 给定一个设备编号区间[start, end],包含4或18的编号都不能使用,如:418、…

arcgisPro将一个图层的要素复制到另一个图层

1、打开两个图层,如下,其中一个图层中有两个要素,需要将其中一个要素复制到另一个图层中,展示如下: 2、选中待复制要素,点击复制按钮,如下: 3、下拉粘贴按钮列表,选择【选…

学AI绘图【300集SD新课】--Stable Diffusion教程

学AI绘图需要以下步骤: 明确目标和需求:首先明确设计图的目的,是用于展示算法流程、模型结构还是其他目的。选择合适的工具:根据需求选择合适的绘图工具,如Visio、PowerPoint、Adobe Illustrator等。绘制草图&#xf…

【全开源】知识库文档系统源码(ThinkPHP+FastAdmin)

知识库文档系统源码:构建智慧知识库的基石 引言 在当今信息爆炸的时代,知识的有效管理和利用对于企业和个人来说至关重要。知识库文档系统源码正是为了满足这一需求而诞生的,它提供了一个高效、便捷的平台,帮助用户构建、管理、…

【Mac】MWeb Pro(好用的markdown编辑器) v4.5.9中文版安装教程

软件介绍 MWeb Pro for Mac是一款Mac上的Markdown编辑器软件,它支持实时预览,语法高亮,自动保存和备份等功能,并且有多种主题和样式可供选择。此外,MWeb还支持多种导出格式,包括HTML、PDF、Word、ePub等&a…

失落的方舟台服预下载教程 一键下载+账号注册教程

失落的方舟台服预下载教程 一键下载+账号注册教程 是一款今年备受瞩目的游戏,将于5月30日正式上线,这款游戏搭建在虚幻引擎的基础上,为玩家们带来了极佳的视觉体验。这款游戏秉承着MMO类型游戏一贯的玩法,但是制作组在…

小阿轩yx-DNS域名解析服务分离解析

小阿轩yx-DNS域名解析服务分离解析 分离解析介绍 分离解析的域名服务器实际也是主域名服务器这里主要是指根据不同的客户端提供不同的域名解析记录比如来自内网和外网的不同网段地址区域的客户机求解析同一域名时,为其提供不同的解析结果,得到不同的IP…

【linux性能分析】heaptrack分析内存占用

文章目录 1. Heaptrack是什么2. Heaptrack有哪些功能3. Heaptrack和valgrind massif对比4. Heaptrack安装5. Heaptrack生成追踪文件6. heaptrack_gui进行内存分析7. heaptrack_print也能用于堆分析8. 报错解决9. 补充介绍:heaptrack编译安装 1. Heaptrack是什么 he…

C语言之函数和函数库以及自己制作静态动态链接库并使用

一:函数的本质 1:C语言为什么会有函数 (1)整个程序分为多个源文件,一个文件分为多个函数,一个函数分成多个语句,这就是整个程序的组织形式。这样的组织好处在于:分化问题、、便于程序…

【Python 对接QQ的接口(二)】简单用接口查询【等级/昵称/头像/Q龄/当天在线时长/下一个等级升级需多少天】

文章日期:2024.05.25 使用工具:Python 类型:QQ接口 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法)&…

【2024软考】史上最全!软考刷题+解析大合集(9万字全手工打,货真价实)

计算机基础知识 1.中断向量表用来保存各个中断源的中断服务程序的入口地址。当外设发出中断请求信号(INTR)以后,由中断控制器(INTC)确定其中断号,并根据中断号查找中断向量表来取得其中断服务程序的入口地…

基于机器学习预测未来的二氧化碳排放量(随机森林和XGBoost)

基于机器学习预测未来的二氧化碳排放量(随机森林和XGBoost) 简介: CO2排放是当今全球关注的环境问题之一。本文将使用Python对OWID提供的CO2排放数据集进行分析,并尝试构建机器学习模型来预测未来的CO2排放趋势。我们将探索数据…

Cloudflare Worker 部署bingai

Cloudflare Worker 部署 1. 注册 Cloudflare 账号 2. 一键部署 登录账户后, 点击下面链接 https://deploy.workers.cloudflare.com/?urlhttps://github.com/Harry-zklcdc/go-proxy-bingai 点击「Authorize Workers」, 登录 Github 账号授权 Cloudflare 点击「I have a ac…