JVM类 和 spring Bean 的实例化 和 初始化区别以及顺序

JVM

我们jvm环境的一个类,会经过类加载(loading)->连接(linking)->初始化(Initializing)->使用(实例化)->卸载(GC) 的过程

1.类加载:jvm将编译好的class字节码文件加载到方法区

2.连接:

  • 校验: 验证文件是否符合JVM规定
  • 准备: 给静态变量赋默认值
  • 解析: 虚拟机将常量池内的符号引用替换为直接引用的过程。解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用限定符7类符号引用进行

3.初始化

4.使用:这里进行实例化

调用类初始化代码 ,给静态成员变量赋初始值

所有在JVM环境下类必须 先初始化后 才能 实例化

spring

spring环境下的实例化、初始化和jvm中的含义是完全不一样的,这个需要从spring bean的生命周期说起。

spring bean的生命周期:

1.实例化bean(这里对应jvm类加载->初始化全过程)

2.populate bean(bean装载属性,属性注入依赖)

3.bean的初始化

  •  执行Aware相关接口的set方法注入依赖
  •  执行BeanPostProcessors的前置方法
  • @PostConstruct注解方法执行
  • InitializingBean接口实现类(组件)的初始化方法afterPropertiesSet执行
  • 自己指定的init-method方法执行
  • 注册销毁方法

4.使用Bean

5.销毁Bean

总结:

从上面的内容可以看出:spring bean中bean实例化、初始化跟JVM中类的实例化、初始化的观察角度是不一样的。

其中spring bean 的实例化就包含了jvm对一个类的初始化->实例化过程;

spring bean是先对bean进行实例化后 再进行初始化。

 

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值