栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring 容器加载流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring 容器加载流程

个人学习笔记

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都缓存到Map singletonObjects = 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);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号