spring源码流程
2022-06-02 11:10:19 1 举报
spring源码流程
作者其他创作
大纲/内容
调用实现Ordered接口
初始化事件多播器
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
initApplicationEventMulticaster
默认没有实现,在springboot中启动了web容器
prepareBeanFactory(beanFactory);
归类
冻结beanDefinition
setConversionService
实现了Ordered接口
对传入的BFPP归类
调用BFPP的回调类
postProcessor.postProcessBeanDefinitionRegistry(registry);
processConfigurationClass
DefaultListableBeanFactory beanFactory = createBeanFactory();
beanFactory.setSerializationId(getId());
addEmbeddedValueResolver
调用了实现BeanDefinitionRegistryPostProcessor接口的bean
排序
invokeBeanfactoryPostProcessors(beanFactory)
没有实现接口的
设置内置的值处理器
解析@Component解析@PropertySources解析@ComponentScans解析@Imports解析@ImportSource解析@Bean解决单例
设置类型转换
BFPP子类ConfigurationClassPostProcessor解析注解
onRefresh
调用
剩下未执行的
注册监听器
实现了PriorityOrdered接口
开始对象实例化
customizeBeanFactory(beanFactory);
清理缓存
调用实现PriorityOrdered接口
创建DefaultListableBeanFactory对象
loadBeanDefinitions(beanFactory);
finishBeanFactoryInitialization
preInstantiateSingletons
if (hasBeanFactory()) {\t\t\tdestroyBeans();\t\t\tcloseBeanFactory();\t\t}
已经执行过的跳过
为了序列化指定id,可以从id反序列化到beanFactory对象
ApplicationContext context = new ClassPathXmlApplicationContext(\"test.xml\");
setTempClassLoader
默认没有实现,留给子类实现
prepareRefresh
super(parent);
freezeConfiguration
设置配置文件路径到当前应用程序中
国际化
禁止使用临时类加载器进行类型匹配
调用实现了BeanFactoryPostProcessor接口的bean
注册bean处理器,这里只是注册功能,真正调用的是getBean方法
定制beanFactory,设置相关属性,包括是否允许覆盖同名称的不同定义的对象以及是否允许循环依赖
从这个方法开始进行对象的创建,包括对象的实例化,初始化,循环依赖,AOP等核心流程的处理
registerBeanPostProcessors(beanFactory)
设置父类容器初始化
refresh核心方法
initMessageSource
给容器对象属性赋值操作1.ExpressionResolver --SPEL表达式解析器2. PropertyEditor --属性编辑器3. beanPostProcessors --BPP集合4. ignoreDependencyInterfaces --忽略接口集合
postProcessBeanFactory(beanFactory)
1.设置容器的启动时间2. 设置活跃状态为true3. 设置关闭状态为false4.获取Enviroment对象,并加载当前系统的属性值到Enviroment对象中5. 准备监听器和事件的集合对象,默认空的集合
refreshBeanFactory();初始化beanFactory
setConfigLocations(configLocations)
registerListeners
收藏
收藏
0 条评论
下一页