zoukankan      html  css  js  c++  java
  • Spring NamespaceHandlerResolver xml的标签加载的扩展 和 ApplicationContext

    NamespaceHandlerResolver

    public NamespaceHandler resolver(String namespaceUri);

    DefaultNamespaceHandlerResolver返回执行标签解析的 NamespaceHandler对象

    DefaultNamespaceHandlerResolver implements NamespaceHandlerResolver 

    default_handler_mappings_location = "META-INF/spring.handlers";

    spring.handlers文件的配置使用的NamespaceHandler对象

    http://www.springframework.org/schema/aop=cn.tk.***.aop.config.AopNamespaceHandler

     

    AopNamespaceHandler extends NamespaceHandlerSupport

    执行注册 BeanDefinitionParser 对象

    public void init(){

        registrerBeanDefinitionParser("config", new ConfigBeanDefinitionParser());

    }

    AOP标签的解析交给ConfigBeanDefinitionParser对象解析

    ApplicationContext

    ClassPathXmlApplicationContext --> AbstractXmlApplicationContext --> AbstratcRefreshableConfigApplicationContext --> 

    AbstractRefreshableApplicationContext --> AbstractApplicationContext

    AbstractApplicationContext 中 refresh()方法

    public void refresh() {

    prepareRefresh();

    获取BeanFactory  

    AutowireCapableBeanFactory beanFactory = obtainFreshBeanFactory();

    执行 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor

    registerBeanPostProcessors(beanFactory);

    执行Bean的getBean()方法

    finishBeanFactoryInitialization(beanFactory);

    }

  • 相关阅读:
    FFmpeg简单使用:解封装 ---- 基本流程
    SDL播放PCM音频数据
    JDK8时间新API-2
    RocketMq延时队列的实现原理
    Kibana复杂查询语句
    Es基础api
    Redis sscan命令
    如何实现分布式的延时队列
    客户端从broker拉取的messagequeue的样子
    RocketMq多个consumerQueue长什么样子
  • 原文地址:https://www.cnblogs.com/zhongchang/p/11944502.html
Copyright © 2011-2022 走看看