这是否遵循 XML 的通用名称空间设计模式,以便我可以准确推断出哪些 bean 属于哪个名称空间?如果没有,我如何检查底层 API 以便做出准确的评估?
1 回答
你可以找到,但你必须挖掘一些代码。处理命名空间的入口点是org.springframework.beans.factory.xml.NamespaceHandler
. 此实现通常会设置许多org.springframework.beans.factory.xml.BeanDefinitionParser
实现来处理该命名空间中的各种顶级元素。
NamespaceHandler
实现通常根据它们支持的模式命名,但这并不能保证。要毫无疑问地确定哪个处理程序负责给定命名空间,您需要找到spring.handlers
定义该命名空间处理程序的文件。该文件将位于包含 jar 的 META-INF 文件夹中。
例如:在 spring-tx-[version].jar 的 META-INF 文件夹中,有一个spring.handlers
包含以下行的文件:
http\://www.springframework.org/schema/tx=org.springframework.transaction.config.TxNamespaceHandler
也就是说,tx
命名空间由TxNamespaceHandler
. 如果您查看该处理程序的源代码,init()
您将看到
registerBeanDefinitionParser("advice", new TxAdviceBeanDefinitionParser());
这意味着<tx:advice>
您的 spring xml 中的语句由org.springframework.transaction.config.TxAdviceBeanDefinitionParser
. 您可以以类似的方式spring.handlers
深入研究任何内容。NamespaceHandler