当前位置: 首页 > news >正文

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方法已执行完,,,,");}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Alienware外星人笔记本m17 R3原厂OEM预装Win10系统包下载,恢复开箱状态电脑自带系统
  • python 多线程处理图片
  • 【算法】前缀和——寻找数组的中心下标
  • 【2024最新华为OD-C卷试题汇总】传递悄悄话的最长时间(100分) - 三语言AC题解(Python/Java/Cpp)
  • 杰理-耳机进入关机关闭内内置触摸-节省功耗
  • 数据结构_链式二叉树(Chained binary tree)基础
  • 什么是JDK21虚拟线程
  • gc和gccgo编译器
  • Python函数、类和方法
  • 机器学习中的时卷积神经网络
  • flutter 实现旋转星球
  • 零基础HTML教程(33)--HTML5表单新功能
  • 【LVGL_Linux安装NXP的Gui-Guider】
  • android ndc firewall 命令type 黑名单 白名单差异
  • make是什么
  • Android优雅地处理按钮重复点击
  • EventListener原理
  • HTTP请求重发
  • java概述
  • Logstash 参考指南(目录)
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vue小说阅读器(仿追书神器)
  • Webpack 4 学习01(基础配置)
  • 当SetTimeout遇到了字符串
  • 搞机器学习要哪些技能
  • 关于for循环的简单归纳
  • 力扣(LeetCode)22
  • 聊聊hikari连接池的leakDetectionThreshold
  • 漂亮刷新控件-iOS
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 算法-图和图算法
  • 项目实战-Api的解决方案
  • 一、python与pycharm的安装
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #QT项目实战(天气预报)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (4) PIVOT 和 UPIVOT 的使用
  • (6)STL算法之转换
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (黑马C++)L06 重载与继承
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十) 初识 Docker file
  • (一) 初入MySQL 【认识和部署】
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)jdk与jre的区别
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .net Application的目录
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net 反编译_.net反编译的相关问题
  • .NET 解决重复提交问题
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .project文件