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

Spring 启动流程!!!

启动后端服务时,标注了 @PostConstruct 注解的方法会自动执行。当你启动一个 Spring Boot 或 Spring 应用时,Spring 容器会在初始化 Bean 时自动执行这些方法。

详细解释:

  1. Spring 启动流程
    • 当你启动后端服务时(比如通过 java -jar 或通过 Spring Boot 的启动类运行),Spring 会初始化 Spring 容器
    • 在容器启动时,Spring 会扫描配置文件、扫描 @Component@Service@Repository 等注解标注的类,然后实例化这些 Bean。
    • @PostConstruct 注解的方法会在所有的依赖注入完成之后被自动调用。这意味着,只要你的服务启动并且 Spring 完成 Bean 的初始化后,这些 @PostConstruct 注解的方法会自动执行。

核心步骤:

  1. Spring 容器启动:例如,通过 Spring Boot 启动类启动服务时,Spring Boot 会自动创建并初始化 Spring 容器。

  2. 实例化 Bean:Spring 会根据配置和注解定义实例化所有的 Bean,包括扫描到的 @Component@Service 等注解标注的类。

  3. 依赖注入:容器会注入所需的依赖(如通过 @Autowired 注解的字段、构造函数等)。

  4. 执行 @PostConstruct 注解的方法:当所有的依赖注入完成后,Spring 会自动执行标注了 @PostConstruct 注解的方法。

  5. Bean 可用:所有的初始化过程完成后,Bean 就可以在整个应用中使用。

Spring Boot 示例:

假设你有一个 Spring Boot 项目,在其中有一个服务类标注了 @PostConstruct 注解:

import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;

@Service
public class MyService {

    @PostConstruct
    public void init() {
        System.out.println("MyService 初始化完成!");
    }

    public void execute() {
        System.out.println("业务逻辑执行");
    }
}

启动 Spring Boot 应用:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

启动后的行为:

  1. 启动服务:当你运行 Application.main() 启动 Spring Boot 应用时,Spring 会启动容器。

  2. Bean 实例化:Spring 会扫描到 MyService 类,实例化它,并自动执行其中的 @PostConstruct 注解的 init() 方法。

  3. 输出:在控制台中,你会看到 MyService 初始化完成!,表明 @PostConstruct 方法已经被执行。

  4. 服务正常运行:之后,你的应用会继续运行,MyService 的其他方法(如 execute())也可以被调用。

总结:

  • 启动后端服务时,Spring 容器会自动初始化所有 Bean,并且在初始化过程中会自动执行所有标注了 @PostConstruct 注解的方法。这意味着,在应用启动时,@PostConstruct 标注的方法会被自动调用,以完成 Bean 的初始化工作。

  • 这种初始化机制发生在 后端服务启动的早期阶段,即在 Spring 容器完成 Bean 实例化和依赖注入后,但是在服务真正开始处理请求之前。

因此,你可以放心地认为,当服务启动时,@PostConstruct 方法会自动执行,不需要手动调用。


http://www.kler.cn/a/443758.html

相关文章:

  • NLP 中文拼写检测开源-01-基于贝叶斯公式的拼写检查器 CSC
  • Leetcode中最常用的Java API——util包
  • STM32, GD32 cubemx CAN 低速率125kbps 报文丢失,解决了
  • Java实现贪吃蛇游戏
  • 《薄世宁医学通识50讲》以医学通识为主题,涵盖了医学的多个方面,包括医学哲学、疾病认知、治疗过程、医患关系、公共卫生等
  • 武汉市电子信息与通信工程职称公示了
  • 分布式光伏电站气象站
  • 每天40分玩转Django:Django缓存视图
  • 98. 验证二叉搜索树(java)
  • Android app反编译 攻与防
  • 在Windows Server路由和远程访问服务中启用L2TP/IPsec VPN
  • 实现路由懒加载的方式有哪些?
  • git配置以及替换gerrit默认commit-msg hook~转
  • armsom产品Debian系统开发
  • 打造基于 SSM 和 Vue 的卓越电脑测评系统:挖掘电脑潜力
  • 【网络安全】【Kali Linux】简单ICMP主机探测
  • lightRAG 论文阅读笔记
  • TA-Lib金融技术分析库文件
  • 启动异常:Caused by: java.lang.IllegalStateException: Failed to introspect Class
  • Spark-Streaming集成Kafka
  • VC-S100D-CW智能离线语音识别冷暖色单色小夜灯IC方案
  • [WinError 183] 当文件已存在时,无法创建该文件
  • CSDN数据大屏可视化【开源】
  • 树莓派3B+驱动开发(8)- i2c控制PCF8591
  • [HNCTF 2022 Week1]baby_rsa
  • 计算机网络之王道考研读书笔记-2