spring源码
2021-03-19 15:48:48 68 举报
spring源码随笔记
作者其他创作
大纲/内容
初始化earlyApplicationEvents
设置了变量this.parent=parent
AbstractAutowireCapableBeanFactory
没看懂干嘛的.好像是可以处理特殊的attributes或者子标签
根据相对路径生成绝对路径
AbstractRefreshableApplicationContext
设置了变量this.resourcePatternResolver=new PathMatchingResourcePatternResolver(this);
循环处理
将applicationListens加入到earlyApplicationListeners
refresh是否为true
获取import上配置的resource路径
getBean(beanName)
DefaultListableBeanFactory
否
aliasMap.remove(alias)
是
构造器(parentBeanFactory)
aliasMap.get(alias)是否为空?
getInternalParentBeanFactory()
customizePropertySources(propertySources)
一个占位方法
prepareRefresh()
1. 设置reader的environment为applicationContext的environent.即一开始初始化的那个environment2.设置reader的resourceLoad为applicationContext自身3.设置reader的entityResolver为new ResourceEntityResolver(this)
setConfigurations
customizeBeanFactory(beanFactory)
importBeanDefinitionResource(ele)
setParentBeanFactory(parentBeanFactory)
构造器(parent)
是否是绝对路径
AbstractApplicationContext
super(parent)
import标签
beans标签
doRegisterBeanDefinitions(ele)
loadBeanDefinitions(beanFactory)
prepareBeanFactory(beanFactory)
loadBeanDefinitions(beanDefinitionReader)
初始化XmlBeanDefinitionReader
构造器()
onRefresh()
invokeBeanFactoryPostProcessors(beanFactory)
getMergedLocalBeanDefinition(beanName)
开始读xml文件了!!!
主要解析xml文件生成doc对象
初始化StarupStep对象
processBeanDefinition(ele)
alias标签
1. 往ignoredDependencyInterfaces中添加忽略注入的类型默认添加了以下三个BeanNameAware.classBeanFactoryAware.classBeanClassLoaderAware.class2.根据系统参数org.graalvm.nativeimage.imagecode是否配置来确定对应的实例化策略如果未配置使用SimpleInstantiationStrategy配置了使用CglibSubclassingInstantiationStrategy
parseDefaultElement
bean=getBean(\"&\"+beanName)
loadBeanDefinitions(Resource)
Environment.merge(parentEnvironment)将parent里的一些变量值添加到当前ApplicaitonContext
parent是否为null
StandardEnvironment
setParent(parent)
resetCommonCaches();
期间发生错误
AbstractBeanDefinitionReader
构造器(configLocation)
BeanDefinitionReaderUtils.registerBeanDefinition
给beanFactory设置id
创建BeanFactory
refreshBeanFactory()
this()
processAliasRegistration(ele)
validateRequiredProperties()
这里的listener、events不知道干嘛的
registerListeners()
根据上面方法的doc对象解析注册bean
doRegisterBeanDefinitions(doc)
getEnviroment()
构造器(beanFactory)
bean标签
AbstractEnvironment
当前beanFactory是否存在
initMessageSource()
preInstantiateSingletons()
alias与name是否相同
方法使用了一个类变量当锁.同一时间只能有一个线程在refresh
不知道干嘛的
finishRefresh
初始化一些变量信息
将传入配置文件路径赋值到this.configurations数组里
DefaultBeanDefinitionDocumentReader
给beanDefinitionReader设置属性
bean.isEagerInit?
初始化ClassPathXmlApplicationContext该类下有多个构造器方法根据传入的参数有不同初始化操作主要有以下四个参数1.configLocation 配置文件的路径2.refresh 是否刷新容器3. class4. parent 父类容器
this.startDate=当前时间戳this.closed=falsethis.active=true
类初始化时this.propertySource=new MutablePropertySources()this.ropertyResolver = PropertySourcesPropertyResolver(propertySource)
获取beanFactoryobtainFreshBeanFactory()
构造器(registry)
XmlBeanDefinitionReader
refresh()
initApplicationEventMulticaster()
ClassPathXmlApplicaitonContext
默认设置了开启xml校验可子类重写多设置点属性
destroyBeans
调用BeanDefinitionReader.loadBeanDefinitions(Resource)
registerBeanPostProcessors(beanFactory)
判断alias标签上是否name和alias都配置了
AbstractRefreshableConfigApplicationContext
获取子element并循环处理
parent.getEnvironment是否是ConfigurableEnvironment
postProcessBeanFactory
initBeanDefinitionReader(beanDefinitionReader)
element是否是beans标签
earlyApplicationListeners是否为null
parseCustomElement
如果是root
AbstractXmlApplicationContext
parseBeanDefinitions
销毁操作
finishBeanFactoryInitialization()
loadBeanDefinitions(Resource..)
isFactory?
initPropertySources
0 条评论
下一页