zoukankan      html  css  js  c++  java
  • Spring-beans之BeanFactory初始化

    学而时习之,不亦乐乎?

    一:元数据读取

    BeanFactory 核心功能是根据名字或者类获取对象,getBean

    BeanDefinitionRegistry 负责注册BeanDefinition,registerBeanDefinition

    BeanDefinition 封装创建对象的元数据信息

    Resource 封装资源文件

    BeanDefinitionReader 读取BeanDefinition并注册到BeanDefinitionRegistry,loadBeanDefinitions

    XmlBeanDefinitionReader 通过加载xml文件注册BeanDefinition

    DocumentLoader 读取、校验、转换xml文件为Document

    BeanDefinitionDocumentReader 解析Document,注册BeanDefinition, registerBeanDefinitions

    BeanDefinitionParserDelegate 解析具体标签

    BeanDefinitionReaderUtils 提供静态方法注册BeanDefinition到BeanDefinitionRegistry

     二:getBean流程

    【RootBeanDefinition】

    InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation

    SmartInstantiationAwareBeanPostProcessor.determineCandidateConstructors

    【Bean】

    MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition

    SmartInstantiationAwareBeanPostProcessor.getEarlyBeanReference

    InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation

    【populate】

    InstantiationAwareBeanPostProcessor.postProcessPropertyValues

    【invokeAwareMethods】

    BeanPostProcessor.postProcessBeforeInitialization

    【invokeInitMethods】

    BeanPostProcessor.postProcessAfterInitialization

    三:自定义标签

    BeanDefinitionParserDelegate 自己解析默认标签,使用名称空间处理器解析自定义标签

    NamespaceHandlerResolver 读取META-INF/spring.handlers文件,获取自定义标签对应的处理器

    http://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler
    http://www.springframework.org/schema/jee=org.springframework.ejb.config.JeeNamespaceHandler
    http://www.springframework.org/schema/lang=org.springframework.scripting.config.LangNamespaceHandler
    http://www.springframework.org/schema/task=org.springframework.scheduling.config.TaskNamespaceHandler
    http://www.springframework.org/schema/cache=org.springframework.cache.config.CacheNamespaceHandler

    NamespaceHandler 处理自定义名称空间

    NamespaceHandlerSupport 对名称空间处理分离

    	/**
    	 * Stores the {@link BeanDefinitionParser} implementations keyed by the
    	 * local name of the {@link Element Elements} they handle.
    	 */
    	private final Map<String, BeanDefinitionParser> parsers = new HashMap<>();
    
    	/**
    	 * Stores the {@link BeanDefinitionDecorator} implementations keyed by the
    	 * local name of the {@link Element Elements} they handle.
    	 */
    	private final Map<String, BeanDefinitionDecorator> decorators = new HashMap<>();
    
    	/**
    	 * Stores the {@link BeanDefinitionDecorator} implementations keyed by the local
    	 * name of the {@link Attr Attrs} they handle.
    	 */
    	private final Map<String, BeanDefinitionDecorator> attributeDecorators = new HashMap<>();
    

     自定义的名称空间处理器context

    public class ContextNamespaceHandler extends NamespaceHandlerSupport {
    
    	@Override
    	public void init() {
    		registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
    		registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());
    		registerBeanDefinitionParser("annotation-config", new AnnotationConfigBeanDefinitionParser());
    		registerBeanDefinitionParser("component-scan", new ComponentScanBeanDefinitionParser());
    		registerBeanDefinitionParser("load-time-weaver", new LoadTimeWeaverBeanDefinitionParser());
    		registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
    		registerBeanDefinitionParser("mbean-export", new MBeanExportBeanDefinitionParser());
    		registerBeanDefinitionParser("mbean-server", new MBeanServerBeanDefinitionParser());
    	}
    
    }

    BeanDefinitionParser 解析自定义的名称空间标签

    BeanDefinitionDecorator 修饰自定义的名称空间属性

  • 相关阅读:
    MVC3中输出Html标签的方法
    Server.MapPath 出现未将对象引用设置到对象的实例
    谈谈网站静态化
    WCF 服务应用程序与 服务库之间的区别
    插入中国所有省和市的SQL语句--以后用
    KiCad 元件值 F4NNIU 规范 (2020-04-30)[31.98%]
    FastAdmin 安装后点登录没有反应怎么办?
    笔记:读英国老太太的复仇计划 (2019-10-15)
    KiCad 工程用 Git 管理需要忽略哪些文件?
    关于 SSD 的接口和相关名词(2019-09-10)
  • 原文地址:https://www.cnblogs.com/zby9527/p/13094155.html
Copyright © 2011-2022 走看看