源码环境搭建
学习链接
事件机制:
juejin.cn/post/684490…
FactoryBean:
juejin.cn/post/684490…
spring 执行流程(xml配置):
lby-test
com.lby.helloworld.HelloApplication#main()
资源定位
spring-context -> spring-beans org.springframework.context.support.ClassPathXmlApplicationContext#ClassPathXmlApplicationContext() org.springframework.context.support.AbstractXmlApplicationContext#AbstractXmlApplicationContext() org.springframework.context.support.AbstractRefreshableConfigApplicationContext#AbstractRefreshableConfigApplicationContext() org.springframework.context.support.AbstractRefreshableApplicationContext#AbstractRefreshableApplicationContext() org.springframework.context.support.AbstractApplicationContext#AbstractApplicationContext() org.springframework.context.support.AbstractApplicationContext#getResourcePatternResolver() org.springframework.core.io.support.PathMatchingResourcePatternResolver#PathMatchingResourcePatternResolver() org.springframework.context.support.AbstractRefreshableConfigApplicationContext#setConfigLocations() org.springframework.context.support.AbstractApplicationContext#refresh() org.springframework.context.support.AbstractApplicationContext#prepareRefresh() org.springframework.context.support.AbstractApplicationContext#obtainFreshBeanFactory()
资源准备
org.springframework.context.support.AbstractXmlApplicationContext#loadBeanDefinitions() org.springframework.beans.factory.support.AbstractBeanDefinitionReader#loadBeanDefinitions() org.springframework.beans.factory.xml.XmlBeanDefinitionReader#loadBeanDefinitions()
资源加载
org.springframework.beans.factory.xml.XmlBeanDefinitionReader#doLoadBeanDefinitions() org.springframework.beans.factory.xml.XmlBeanDefinitionReader#doLoadDocument() org.springframework.beans.factory.xml.XmlBeanDefinitionReader#registerBeanDefinitions() org.springframework.beans.factory.xml.XmlBeanDefinitionReader#createBeanDefinitionDocumentReader() org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#registerBeanDefinitions() org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#doRegisterBeanDefinitions() org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#createDelegate() org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#parseBeanDefinitions() org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#parseDefaultElement() org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#processBeanDefinition() org.springframework.beans.factory.xml.BeanDefinitionParserDelegate#parseBeanDefinitionElement() org.springframework.beans.factory.xml.BeanDefinitionParserDelegate#createBeanDefinition() org.springframework.beans.factory.xml.BeanDefinitionParserDelegate#parseBeanDefinitionAttributes() org.springframework.beans.factory.support.BeanDefinitionReaderUtils#registerBeanDefinition() org.springframework.beans.factory.support.DefaultListableBeanFactory#registerBeanDefinition()
spring 执行流程(java config配置):
spring bean的加载
转换对应beanName
org.springframework.context.support.AbstractApplicationContext#getBean() org.springframework.beans.factory.support.AbstractBeanFactory#getBean() org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean() org.springframework.beans.factory.support.AbstractBeanFactory#transformedBeanName()
尝试从缓存中加载单例
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton()
bean的实例化
缓存中存在:
org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance()
org.springframework.beans.factory.support.FactoryBeanRegistrySupport#getObjectFromFactoryBean()
org.springframework.beans.factory.support.FactoryBeanRegistrySupport#doGetObjectFromFactoryBean()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#postProcessObjectFromFactoryBean()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization()
缓存中不存在:
org.springframework.beans.factory.support.AbstractBeanFactory#getParentBeanFactory()
org.springframework.beans.factory.support.AbstractBeanFactory#markBeanAsCreated()
org.springframework.beans.factory.support.AbstractBeanFactory#getMergedLocalBeanDefinition()
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton()
org.springframework.beans.factory.ObjectFactory#getObject()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean()
org.springframework.beans.factory.support.AbstractBeanFactory#resolveBeanClass()
org.springframework.beans.factory.support.AbstractBeanFactory#doResolveBeanClass()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance()
org.springframework.beans.factory.support.AbstractBeanFactory#resolveBeanClass()
org.springframework.beans.factory.support.AbstractBeanFactory#doResolveBeanClass()
org.springframework.beans.factory.support.AbstractBeanDefinition#resolveBeanClass()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#instantiateBean()
org.springframework.beans.factory.support.SimpleInstantiationStrategy#instantiate()
org.springframework.beans.BeanUtils#instantiateClass()
循环依赖:
org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java:539
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingletonFactory()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#getEarlyBeanReference()
属性注入:
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean()
初始化:
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean()
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods()