- ClassPathXmlApplicationContext 加载XML
- 加载所有的自定义
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());
}
}
- 解析xml节点
4.如果遇到自定义节点交给自定义节点解析器BeanDefinitionParser
的子类比如
<tx:annotation-driven transaction-manager="txManager"/>
命名空间是tx
,对应的处理器类就是TxNamespaceHandler,annotation-driven
就由AnnotationDrivenBeanDefinitionParser
解析
命名比较有规律比如节点中的
tx就是转大驼峰
Tx后面跟
NamespaceHandler`
- 在解析
element
的parse方法中注册RootBeanDefinition
到容器DefaultListableBeanFactory
中
网友评论