美文网首页
Spring 加载xml注册Bean流程

Spring 加载xml注册Bean流程

作者: 王兴岭 | 来源:发表于2020-06-11 16:52 被阅读0次
    1. ClassPathXmlApplicationContext 加载XML
    2. 加载所有的自定义NamespaceHandler比如
    public class TxNamespaceHandler extends NamespaceHandlerSupport {
    
        static final String TRANSACTION_MANAGER_ATTRIBUTE = "transaction-manager";
    
        static final String DEFAULT_TRANSACTION_MANAGER_BEAN_NAME = "transactionManager";
    
    
        static String getTransactionManagerName(Element element) {
            return (element.hasAttribute(TRANSACTION_MANAGER_ATTRIBUTE) ?
                    element.getAttribute(TRANSACTION_MANAGER_ATTRIBUTE) : DEFAULT_TRANSACTION_MANAGER_BEAN_NAME);
        }
    
    
        @Override
        public void init() {
            registerBeanDefinitionParser("advice", new TxAdviceBeanDefinitionParser());
            registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
            registerBeanDefinitionParser("jta-transaction-manager", new JtaTransactionManagerBeanDefinitionParser());
        }
    
    }
    
    1. 解析xml节点
      4.如果遇到自定义节点交给自定义节点解析器BeanDefinitionParser的子类比如
    <tx:annotation-driven transaction-manager="txManager"/>
    

    命名空间是tx,对应的处理器类就是TxNamespaceHandler,annotation-driven就由AnnotationDrivenBeanDefinitionParser解析
    命名比较有规律比如节点中的tx就是转大驼峰Tx后面跟NamespaceHandler`

    1. 在解析element的parse方法中注册RootBeanDefinition到容器DefaultListableBeanFactory

    相关文章

      网友评论

          本文标题:Spring 加载xml注册Bean流程

          本文链接:https://www.haomeiwen.com/subject/umibtktx.html