了解一下类在spring中是何时加载的

getBean

1、根据name
2、根据name和类型
3、根据name和参数
4、根据name、类型和参数
复制代码

doGetBean

String name, 
@Nullable final Class<T> requiredType,
@Nullable final Object[] args, 
boolean typeCheckOnly
复制代码

getSingleton

1、String beanName,true
2、String beanName, boolean allowEarlyReference
复制代码

getObjectForBeanInstance

Object beanInstance, 
String name, 
String beanName, 
@Nullable RootBeanDefinition mbd
复制代码

createBean

1、Class<T> beanClass
2、Class<?> beanClass, int autowireMode, boolean dependencyCheck
3、String beanName, RootBeanDefinition mbd, @Nullable Object[] args
复制代码

resolveBeanClass

final RootBeanDefinition mbd, 
String beanName, 
final Class<?>... typesToMatch
复制代码

doResolveBeanClass

RootBeanDefinition mbd, 
Class<?>... typesToMatch
复制代码

Class.forName(此刻就开始进行类的加载了)

String name, 
boolean initialize(false,表示不需要初始化)
ClassLoader loader
复制代码

Class.forName完成后就完成了以下阶段:

加载:
1、通过一个类的全限定名来获取定义此类的二进制字节流;
2、将字节流转化为方法区的运行时数据结构;
3、内存中实例化一个java.lang.Class对象
连接:
    验证:
    1、文件格式验证;
    2、元数据验证;
    3、字节码验证;
    4、符号引用验证;
    准备:
    1、为类变量(被static修饰)分配内存;
    2、为类变量设置初始值(一般为零值,被final修饰会被设置为自己的值)
    解析(将常量池的符号引用替换为直接引用的过程)
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享