Spring 加载xml注册Bean流程

2020-06-11  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读