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