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

佛山网站建设乐云seo在线制作龙华网站建设

佛山网站建设乐云seo在线制作,龙华网站建设,wordpress图片不能居中,网站备案多久通过Spring Boot 启动与 Service 注入的 JVM 运行细节 我们通过一个具体的 Spring Boot 项目示例,结合 JVM 的类加载和对象实例化机制,详细说明 Service 类的加载、Bean 的创建 以及 方法调用的时序关系。 1. 示例代码 1.1 定义一个 Service 类 Service p…

Spring Boot 启动与 Service 注入的 JVM 运行细节

我们通过一个具体的 Spring Boot 项目示例,结合 JVM 的类加载和对象实例化机制,详细说明 Service 类的加载、Bean 的创建 以及 方法调用的时序关系


1. 示例代码
1.1 定义一个 Service 类
@Service
public class UserService {// 静态代码块:类加载时执行(仅一次)static {System.out.println("[JVM] UserService 类加载,静态代码块执行");}// 构造方法:对象实例化时执行(每次创建 Bean 时执行)public UserService() {System.out.println("[Spring] UserService Bean 实例化,构造方法执行");}public void getUser() {System.out.println("[业务] 调用 getUser 方法");}
}
1.2 主启动类
@SpringBootApplication
public class MyApp implements CommandLineRunner {@Autowiredprivate UserService userService;public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}@Overridepublic void run(String... args) {System.out.println("[Spring] 应用启动完成,开始调用 UserService 方法");userService.getUser();}
}

2. 运行流程与输出分析
2.1 启动 Spring Boot 应用

运行 main 方法时,Spring Boot 启动流程如下:

  1. JVM 加载 MyApp

    • 加载 MyApp.class,生成 Class 对象。
    • 执行 MyApp<clinit>(如果有静态代码块)。
  2. Spring 容器初始化

    • 扫描 @SpringBootApplication 注解下的所有组件。
    • 加载 UserService
      • JVM 加载 UserService.class,触发静态代码块。
      • 输出:[JVM] UserService 类加载,静态代码块执行
  3. 创建 UserService Bean

    • Spring 实例化 UserService(单例模式,默认在启动时创建)。
    • 执行 UserService 的构造方法。
    • 输出:[Spring] UserService Bean 实例化,构造方法执行
  4. 依赖注入

    • UserService Bean 注入到 MyAppuserService 字段。
  5. 启动完成,调用 run 方法

    • 输出:[Spring] 应用启动完成,开始调用 UserService 方法
    • 调用 userService.getUser()
    • 输出:[业务] 调用 getUser 方法

2.2 完整输出结果
[JVM] UserService 类加载,静态代码块执行
[Spring] UserService Bean 实例化,构造方法执行
...
[Spring] 应用启动完成,开始调用 UserService 方法
[业务] 调用 getUser 方法

3. 关键机制详解
3.1 类加载与静态代码块
  • 时机:当 JVM 首次使用 UserService 类时(Spring 扫描到 @Service 注解时触发加载)。
  • 特点
    • 静态代码块在类加载的 初始化阶段 执行,且仅执行一次。
    • 与 Spring Bean 是否创建无关,仅依赖类是否被 JVM 加载。
3.2 Bean 实例化与构造方法
  • 时机:Spring 容器启动时,默认 立即创建单例 Bean(可通过 @Lazy 改为延迟初始化)。
  • 特点
    • 构造方法在对象实例化时执行,每次创建 Bean 都会调用(单例模式下仅一次)。
    • Bean 的创建在类加载完成后进行。
3.3 方法调用
  • 时机:Bean 实例化完成后,通过依赖注入的实例调用方法。
  • 特点
    • 方法调用与对象生命周期无关,仅操作已存在的 Bean 实例。
    • 不会触发类加载或对象创建(单例模式下)。

4. 扩展:JVM 与 Spring 的协作流程
+---------------------+       +---------------------+       +---------------------+
|     JVM 类加载阶段     |       |  Spring Bean 生命周期  |       |      业务方法调用       |
|---------------------|       |---------------------|       |---------------------|
| 1. 加载 MyApp.class  |       | 1. 扫描组件,加载类     |       | 1. 调用 userService.getUser() |
| 2. 加载 UserService  |       | 2. 实例化 Bean(构造方法)|       |                     |
|    - 执行静态代码块    |       | 3. 依赖注入           |       |                     |
+---------------------+       | 4. BeanPostProcessor |       +---------------------++---------------------+

5. 总结
  • 类加载:由 JVM 在 Spring 扫描组件时触发,静态代码块在此阶段执行(仅一次)。
  • Bean 实例化:由 Spring 容器在启动时完成,构造方法在此阶段执行(单例模式下仅一次)。
  • 方法调用:操作已存在的 Bean 实例,与 JVM 类加载和对象创建无关。

关键结论

  • Service 类在 Spring Boot 启动时被加载,构造方法在 Bean 实例化时执行
  • 调用 Service 方法时,使用的是已创建好的 Bean 对象,不会触发新的对象创建

通过此示例,可以清晰看到 JVM 类加载、Spring Bean 生命周期和业务方法调用之间的关系,帮助理解 Java 应用底层运行机制。

http://www.dtcms.com/wzjs/172538.html

相关文章:

  • 网站备案帐户有什么用搜索引擎网站推广如何优化
  • 网站开发后期维护更新搜索引擎优化seo专员
  • 做网站几百块可信吗新闻热点大事件
  • 自己做的网站怎么上传网络电话营销
  • 淘宝怎么做网站百度2022年版本下载
  • wordpress安装插件导致网站百度搜索首页
  • 网站开发项目背景淘宝运营培训班去哪里学
  • 网站建设报表明细长尾关键词
  • 网站建设 海口市场调研怎么写
  • nas做流媒体网站中国最大的企业培训公司
  • 龙之外贸向导su搜索引擎优化
  • 在建设银行网站能换美元吗网站快照优化公司
  • wed网站免费的郑州网络推广服务
  • zencart网站注册是哪个文件网络推广公司简介
  • 松江做网站价格西安自动seo
  • 北京 网站 建设太原自动seo
  • 做批手表批发发的网站游戏推广代理加盟
  • 唐山市里做网站的广州百度竞价开户
  • 深圳做门户网站的网络公司关键词优化的价格查询
  • 潮阳网站制作seo做关键词怎么收费的
  • 做纱线的网站新网站百度收录
  • 咸阳做网站xymokj东莞营销网站建设优化
  • 浙江网站开发百度地图推广电话
  • 企业网站安全建设方案泰安优化关键词排名哪家合适
  • 跟公司产品做网站广告平台推广渠道
  • 百度网站建设微信封面北京网站制作
  • 怎么用手机做网站谷歌ads广告投放
  • 域名网站怎么做的西安百度推广竞价托管
  • 电脑做系统都是英文选哪个网站写软文推广
  • 网站制作一键生成东莞推广