个人学习笔记
7、finishBeanFactoryInitialization(beanFactory);初始化完成剩下的所有单实例bean 1、获取到所有的bean实例RootBeanDefinition 2、判断if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) 1、如果通过判断是否为FactoryBean 2、不是工厂bean,利用getBean(beanName);创建对象 1、doGetBean(name, null, null, false); 2、先通过getSingleton(beanName);获取已经缓存的单实例bean 所有创建的bean都缓存到MapsingletonObjects = new ConcurrentHashMap<>(256); 3、缓存中获取不到,开始bean的创建对象流程 4、markBeanAsCreated(beanName);标记bean已经被创建 5、获取bean的定义信息 6、String[] dependsOn = mbd.getDependsOn();获取bean的其他依赖bean ,如果有,则先创建依赖bean 7、启动单实例bean的创建流程: 1、createBean(beanName, mbd, args); 2、resolveBeforeInstantiation(beanName, mbdToUse);在创建bean之前,希望返回一个代理bean 【InstantiationAwareBeanPostProcessors】 先触发applyBeanPostProcessorsBeforeInstantiation(targetType, beanName); 如果有返回值则触发applyBeanPostProcessorsAfterInitialization(bean, beanName); 3、如果没有返回代理bean,则调用doCreateBean(beanName, mbdToUse, args);创建bean 实例 4、bean属性赋值:populateBean(beanName, mbd, instanceWrapper); 赋值之前: 1、拿到InstantiationAwareBeanPostProcessor后置处理器 执行postProcessAfterInstantiation() 2、InstantiationAwareBeanPostProcessor后置处理器 执行postProcessPropertyValues() 3、利用反射,用setting 给属性赋值 applyPropertyValues(beanName, mbd, bw, pvs); 5、bean的初始化initializeBean(); 1、执行aware接口方法invokeAwareMethods(beanName, bean); 2、执行后置处理器初始化之前applyBeanPostProcessorsBeforeInitialization BeanPostProcessor.postProcessBeforeInitialization(result, beanName); 3、执行初始化方法invokeInitMethods(beanName, wrappedBean, mbd); 1、是否是InitializingBean接口的实现,执行接口规定的初始化 2、是否自定义初始化 4、执行后置处理器初始化之后applyBeanPostProcessorsAfterInitialization() BeanPostProcessor.postProcessAfterInitialization(result, beanName); 6、执行bean的销魂方法 8、将创建好的bean放到缓存中addSingleton(beanName, singletonObject); 8、finishRefresh(); 完成BeanFactory的初始化创建工作 1、initLifecycleProcessor();初始化和生命周期有关的处理器LifecycleProcessor 写一个LifecycleProcessor的实现类,重写 onRefresh(); onClose(); 2、getLifecycleProcessor().onRefresh(); 拿到前面定义的生命周期处理器,回调onRefresh() 3、publishEvent(new ContextRefreshedEvent(this));发布容器刷新完成事件 4、LiveBeansView.registerApplicationContext(this);



