spring 解析流程
2021-09-07 18:04:59 0 举报
spring流程图
作者其他创作
大纲/内容
// 这里是 额外注册一些BeanDefinition的 //比如 springboot 中就这里扫面并注册BeanDefinition 比如在web中加入request session等 scope 等处理 postProcessBeanFactory(beanFactory);
spring 流程
BeanDefinitionReaderUtils
// Last step: publish corresponding event.\t\t\t\tfinishRefresh();
public int loadBeanDefinitions(EncodedResource encodedResource) throws BeanDefinitionStoreException { Set<EncodedResource> currentResources = this.resourcesCurrentlyBeingLoaded.get(); if (!currentResources.add(encodedResource)) { throw new BeanDefinitionStoreException( \"Detected cyclic loading of \" + encodedResource + \" - check your import definitions!\
注册器实现有很多 经典的是DefaultListableBeanFactory
AbstractApplicationContext.refresh()
BeanDefinitionDocumentReader 针对解析DocmentReader
@Override public int loadBeanDefinitions(Resource... resources) throws BeanDefinitionStoreException { int count = 0; for (Resource resource : resources) { count += loadBeanDefinitions(resource); } return count; }
AbstractRefreshableApplicationContext
@Override protected final void refreshBeanFactory() throws BeansException { //创建beanFactory 实例 DefaultListableBeanFactory beanFactory = createBeanFactory(); //设置Id beanFactory.setSerializationId(getId()); customizeBeanFactory(beanFactory); //解析xml 并且注册 loadBeanDefinitions(beanFactory); this.beanFactory = beanFactory; }
BeanDefinitionDocumentReader
BeanDefinitionRegistry
解析的时候放入的
DefaultListableBeanFactory 这个类 很重要
这个BeanFactory 其实就是核心 ListableBeanFactory 是beanDefin 存放的地方AutowireCapableBeanFactory 创建bean 实例的实现
正在创建来源
// Invoke factory processors registered as beans in the context.//调用 实现了 BeanFactoryPostProcessor接口 主要用来添加beanFactory 属性 还有一个重要作用是 调用实现了 BeanDefinitionRegistryPostProcessor 接口的 这个是支持@config 等的关键 invokeBeanFactoryPostProcessors(beanFactory);
// Check for listener beans and register them.//注册所有 listener registerListeners();
这里有很多实现其中包括最重要的
BeanDefinitionParser 解析实现
BeanDefinitionReader
BeanDefinitionParserDelegate 标签解析
ClassPathBeanDefinitionScanner
ComponentScanBeanDefinitionParser
@Override public void preInstantiateSingletons() throws BeansException { if (logger.isTraceEnabled()) { logger.trace(\"Pre-instantiating singletons in \
AbstractXmlApplicationContext
PostProcessorRegistrationDelegate
// Instantiate all remaining (non-lazy-init) singletons. //创建实例 非常重要 里面有很东西 要应用 finishBeanFactoryInitialization(beanFactory);
int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException;
//注册必要的 BeanDefinitionRegistryPostProcessor 包括对 @config @bean @import BeanDefinitionRegistry 等支持
NamespaceHandler
protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { //这里解析xml 抽象方法需要实现 refreshBeanFactory(); return getBeanFactory(); }
@SuppressWarnings(\"unchecked\
AbstractApplicationContext
// Prepare this context for refreshing.\t\t\tprepareRefresh();
// Initialize event multicaster for this context.// 初始化监听器 initApplicationEventMulticaster();
XmlBeanDefinitionReader
AbstractAutowireCapableBeanFactory extends AbstractBeanFactory implements AutowireCapableBeanFactory
创建bean实例
AnnotationConfigUtils
// Prepare the bean factory for use in this context.//刷新 beanFactory 容器 prepareBeanFactory(beanFactory);
loadBeanDefinitions()
NamespaceHandlerSupport
AbstractBeanFactory
实现有很多只分析其中一个 如果要自定义名称空间即自己实现本接口即可
// Initialize message source for this context. //国际化资源 initMessageSource();
刷新容器解析xml 为BeanDefinition
解析的实现类也很多负责具体解析其中的标签
AbstractBeanDefinitionReader
// Initialize other special beans in specific context subclasses. // 在spring boot 中这将会很有用 onRefresh();
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
/** * Register each bean definition within the given root {@code <beans/>} element. */ @SuppressWarnings(\"deprecation\
收藏
0 条评论
下一页