createBean()
-
获取bean对象的class对象
-
prepareMethodOverrides lookup-method replace-method
-
resolveBeforeInstantitation 给beanPostProcessor一个机会返回当前的bean代理对象(如果包含aop的相关处理,那么会在此处生成advisor对象,方便后续进行调用)
-
doCreateBean 实际创建的方法
-
创建当前bean的包装对象,默认为空BeanWrapper
-
是否为空
是: createBeanInstance bean 反射
1、获取当前bean的class对象
2、验证访问修饰符 否:抛异常
3、是 :验证bd中是否包含supplier 是:obtainFromSupplier通过supplier创建对象并且直接返回
4、否:是否包含factorymethod 是:通过factorymethod来生成具体的对象并且返回
5、否:获取当前bean的构造方法来生成具体的对象
1、使用自动注入的构造器来注入
2、使用默认的构造器来生成
6、通过BeanPostProcessor 或者选择最合适的构造器。autowireConstructor 通过此方式来生成对象并且返回
7、instantiateBean 使用默认的方式来进行实例化操作
8、获取默认的构造方法来进行实例化操作 ctor.newInstance
9、添加bean对象到当前包装类中,并且进行包装类的初始化操作; -
applyMergeBeanDefinitionPostProcessor
autowireAnnotationBeanPostProcessor 解析注解@Autowired @Value
commonAnnotationBeanPostProcessor InitDestroyAnnotationBeanPostProcessor 解析注解@PostConstruct @PreDestroy @Resource -
当前bean是否是单例对象,是否可以被循环引用,是否是正在被创建过程中
同时满足:addSingletonFactory 向三级缓存中添加beanName 和lambda表达式
不满足:9 -
populateBean 完成属性的填充工作
1、再填充属性过程中会涉及到循环依赖的问题 -
initializedBean 完成当前bean的初始化操作
-
invokeAwareMethods调用aware接口相关的方法设置容器属性
1、BeanNameAware
2、BeanClassAware
3、BeanFactoryAware -
如果mbd不为空且Synthetic不为true
-
是 applyBeanPostProcesorsBeforeInitialization循环调用BeanPostProcessor来完成before方法的调用
1、applicationContextAwareProcessor 完成其他aware接口子类的设置工作
1、applicationContext
2、environmentAware
3、ResourceLoaderAware
4、EmbeddedValueResolverAware
5、ApplicationEventPublisherAware
6、MessageSourceAware -
invokeInitMethod执行初始化方法
1、是否实现了initializingBean接口
1、是:直接调用afterPropertiesSet方法来设置属性
2、mbd不等于空且包含initMethod
1、是调用init-method来执行 -
applyBeanPostrocessorsAfterInitialication循环调用BeanPostProcessor来完成after方法调用
1、会生成具体对象的代理对象->aop-》调用jdk或者是cglib的方式来生成代理对象 -
生成完整的对象进行返回操作
-
registerDisposableBeanNecessary 回调 设置需要销毁的对象
-
addSingleton 将生成的完整对象设置到一级缓存中,方便后续获取