之前的spring容器加载核心方法refresh()方法中大部分方法都讲了,但是还有一个非常重要的方法没讲,Bean的实例化、依赖注入、AOP都是在这个方法中完成。










进入getSingleton()方法,从缓存中拿实例对象



把实例添加到一级缓存,上面有段代码调用getObject()方法会执行外层方法的lambda表达式,于是会执行createBean()方法,去创建实例并返回,然后添加到一级缓存。



最核心的方法,Bean的实例化、收集注解、把实例对象添加三级缓存、依赖注入、AOP、Bean的销毁等








进入instantiateUsingFactoryMethod()方法




进入instantiate()方法

进入instantiate()方法

这是一个BeanPostProcessor的应用

进入determineCandidateConstructors()方法





进入autowirdConstructor()方法





进入反射实例化方法instantiate()

进入instantiate()方法

进入instantiateClass()方法


进入resolveAutowiredArgument()方法

进入resolveDependency()方法

进入doResolveDependency()方法

进入resolveCandidate()方法,完成对构造方法中参数的实例化


进入instantiate()方法

进入instantiateClass()方法

一,有factoryBeanName



二,没有factoryBeanName


只有一个构造方法

有多个构造方法,required需设置为false

只能一个构造有方法,如果有多个,必须加上一个无参构造方法


原文:https://www.cnblogs.com/tanyf/p/15171037.html