
spring源码分析
文章平均质量分 67
Blank_Cybill
不忘初心,方的始终
展开
-
每天一点点,Spring执行创建bean(AbstractAutowireCapableBeanFactory#doCreateBean)
Spring 创建bean流程 AbstractAutowireCapableBeanFactory#doCreateBean1、 判断当前bean是不是单例的,如果是单例的,先从缓存中取,如果存在直接返回(在创建之前已经由依赖注入已生成),如果不存在执行创建if (mbd.isSingleton()) { instanceWrapper = this.factoryBeanInstanceCache.remove(beanName);}if (instanceWrapper == null)原创 2022-02-28 17:15:38 · 430 阅读 · 0 评论 -
每天一点点,Spring创建bean实例 AbstractAutowireCapableBeanFactory#createBeanInstance
Spring 执行创建bean实例逻辑AbstractAutowireCapableBeanFactory#createBeanInstance1、确保当前类已加载Class<?> beanClass = resolveBeanClass(mbd, beanName);2、如果当前BeanDefinition设置的有Supplier方法,直接调用此方法生成bean对象Supplier<?> instanceSupplier = mbd.getInstanceSupplie原创 2022-02-27 21:30:47 · 288 阅读 · 0 评论 -
每天一点点,Spring根据找到的构造方法创建bean
Spring得到构造函数之后执行实例化1、如果是默认空参构造1.1、当所有的候选构造函数都为null的时候,会使用空参构造// 如果此处得到的候选构造函数为nullConstructor<?>[] ctors = determineConstructorsFromBeanPostProcessors(beanClass, beanName);//if null == ctors 会执行 AbstractAutowireCapableBeanFactory#instantiateBean原创 2022-02-26 22:41:56 · 326 阅读 · 0 评论 -
每天一点点,Spring选择合适的构造方法执行创建
Spring 得到候选构造方法之后,如何选择使用哪个构造方法?ConstructorResolver#autowireConstructor1、定义三个变量// 最后决定使用的构造方法Constructor<?> constructorToUse = null;// 构造函数需要使用的参数持有器ArgumentsHolder argsHolderToUse = null;// 最后需要使用的构造方法的参数Object[] argsToUse = null;2、explicit原创 2022-02-25 15:50:27 · 635 阅读 · 0 评论 -
每天一点点,Spring得到当前类的候选构造方法
当Spring中 有多个构造函数的时候,是如何得到候选的构造方法AbstractAutowireCapableBeanFactory#determineConstructorsFromBeanPostProcessors其中主要的是 AutowiredAnnotationBeanPostProcessor 这个类AutowiredAnnotationBeanPostProcessor#determineCandidateConstructors 得到候选的构造方法1、找存在@Lookup注解的方法原创 2022-02-24 11:54:54 · 405 阅读 · 0 评论 -
每天一点点 ,Spring 循环依赖
每天一点点 ,Spring 循环依赖原创 2022-02-23 11:27:05 · 390 阅读 · 0 评论