赞
踩
这边文章介绍了类的加载等相关内容,写的不错 https://blog.csdn.net/justloveyou_/article/details/72466105
说的spring容器中bean的初始化和实例化也不得不说类的加载机制。
上面的链接也很好的说了这一过程。
先抽出一部分要点:
类加载->连接(验证,准备,解析)->初始化->使用->销毁
其中类加载又涉及到双亲委派机制:这个这里也不做讨论
特别需要指出的是,类的实例化与类的初始化是两个完全不同的概念:
一般jvm在对类进行加载完成后就会给变量(静态和非静态)赋初始值,比如int类型的 初始值是0 ,引用类型的是null,
public class InstanceInitializer { private int j = getI(); private int i ; //如果 i的初始值=2时下面i地址也是2但是j还是0 private static final int m=9; public InstanceInitializer() { System.out.println(i); System.out.println(m); } private int getI() { return i; } public static void main(String[] args) { InstanceInitializer ii = new InstanceInitializer(); /* * 如果我们执行上面这段代码,那么会发现打印的结果是0。 * 因此我们可以确信,变量j被赋予了i的默认值0, * 这一动作发生在实例变量i初始化之前和构造函数调用之前。 * j获得的是默认值 0 * * */ System.out.println(ii.j); } }
结果:
i=0
m=9
j=0
因为类加载的时候会对变量根据类型赋初始值
好了言归正传 在sprin容器中我们的类又是什么时候进行初始化和实例化的呢?
1 spring中所有bean默认都是单例模式: 所以bean的初始化和实例化都是在加载进入bean容器时做的
2 如果想使用时再初始化 那么可以把类定义为原型模式
@Scope("prototype")或者加上@Lazy默认是true懒加载
觉得文章有帮助的话就赞赏下吧!
微信:
支付宝:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。