类被加载到jvm后再被注册到Spring中

在Java中,类被加载到JVM的过程和被注册到Spring容器的过程是两个不同的步骤,但它们是连续发生的。下面是这个过程的详细说明:

  1. 类加载到JVM

    • 当Java程序运行时,JVM通过类加载器(ClassLoader)将.class文件加载到JVM中。
    • 类加载器负责读取.class文件,将其转换成JVM能理解的字节码,然后生成一个java.lang.Class对象。
    • 这个过程涉及到三个主要的阶段:加载(Loading)、链接(Linking)、初始化(Initialization)。
      • 加载:查找和读取.class文件,创建Class对象。
      • 链接:验证字节码(Verification)、准备(Preparation,为静态变量分配内存并设置默认值)、解析(Resolution,将符号引用转换为直接引用)。
      • 初始化:执行类构造器()方法,初始化静态变量和执行静态初始化代码。
  2. 类注册到Spring容器

    • 当Spring容器启动时,它会扫描指定的包路径,查找带有Spring注解(如@Component、@Service等)的类。
    • Spring使用AnnotationBeanDefinitionReader或XMLBeanDefinitionReader等组件来解析这些注解或XML配置文件,创建BeanDefinition对象。
    • BeanDefinition对象包含了创建bean所需的所有配置信息,如类的全限定名、构造函数参数、属性值、初始化方法等。
    • Spring容器会根据这些BeanDefinition对象创建bean实例,并管理它们的生命周期。
    • 这个过程涉及到实例化bean、属性注入、处理生命周期回调(如@PostConstruct注解的方法)等步骤。

类在JVM中的存在

  • 即使类被注册到Spring容器中,它在JVM中仍然存在。Spring容器只是管理了这些类的实例,但类本身(包括其结构和代码)仍然加载在JVM中。
  • 类的Class对象在JVM的堆内存中,而类的字节码则在方法区(Java 8及之前)或元空间(Java 9及之后)中。
  • 当类的所有实例都被垃圾回收,且没有其他引用指向这个类时,类的定义(包括Class对象)可能会被JVM的垃圾回收器回收。

总结

  • 类首先被加载到JVM中,这是通过类加载器完成的。
  • 然后,Spring容器根据配置信息(注解或XML)创建BeanDefinition对象,并根据这些定义创建和管理bean实例。
  • 类的定义和代码在JVM中仍然存在,直到它们不再被使用并被垃圾回收。

这个过程确保了Java类可以被加载和执行,同时Spring容器可以管理这些类的实例,提供依赖注入、生命周期管理等特性。

相关推荐
程序员黑豆35 分钟前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
风流 少年1 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
小席是个热心肠2 小时前
AI相关的自我学习
java·人工智能·学习
数智化管理手记5 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
cfm_29145 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统6 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
0x537 小时前
Java网络编程(二)
java·服务器·网络
Flittly7 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai7 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库