当前位置:   article > 正文

spring容器中类的初始化和实例化时机_spring 实体类 属性 只会初始化一次啊

spring 实体类 属性 只会初始化一次啊

这边文章介绍了类的加载等相关内容,写的不错 https://blog.csdn.net/justloveyou_/article/details/72466105

说的spring容器中bean的初始化和实例化也不得不说类的加载机制。

上面的链接也很好的说了这一过程。

先抽出一部分要点:

 类加载->连接(验证,准备,解析)->初始化->使用->销毁

其中类加载又涉及到双亲委派机制:这个这里也不做讨论

  特别需要指出的是,类的实例化与类的初始化是两个完全不同的概念:

  • 类的实例化是指创建一个类的实例(对象)的过程;
  • 类的初始化是指为类中各个类成员(被static修饰的成员变量)赋初始值的过程,是类生命周期中的一个阶段。

一般jvm在对类进行加载完成后就会给变量(静态和非静态)赋初始值,比如int类型的 初始值是0 ,引用类型的是null,

  1. public class InstanceInitializer {
  2. private int j = getI();
  3. private int i ; //如果 i的初始值=2时下面i地址也是2但是j还是0
  4. private static final int m=9;
  5. public InstanceInitializer() {
  6. System.out.println(i);
  7. System.out.println(m);
  8. }
  9. private int getI() {
  10. return i;
  11. }
  12. public static void main(String[] args) {
  13. InstanceInitializer ii = new InstanceInitializer();
  14. /*
  15. * 如果我们执行上面这段代码,那么会发现打印的结果是0。
  16. * 因此我们可以确信,变量j被赋予了i的默认值0,
  17. * 这一动作发生在实例变量i初始化之前和构造函数调用之前。
  18. * j获得的是默认值 0
  19. *
  20. * */
  21. System.out.println(ii.j);
  22. }
  23. }

结果:

i=0
m=9
j=0

因为类加载的时候会对变量根据类型赋初始值

好了言归正传 在sprin容器中我们的类又是什么时候进行初始化和实例化的呢?

1 spring中所有bean默认都是单例模式: 所以bean的初始化和实例化都是在加载进入bean容器时做的

2 如果想使用时再初始化  那么可以把类定义为原型模式

@Scope("prototype")或者加上@Lazy默认是true懒加载

觉得文章有帮助的话就赞赏下吧!

 

微信:

支付宝:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/66310
推荐阅读
相关标签
  

闽ICP备14008679号