0

这是否遵循 XML 的通用名称空间设计模式,以便我可以准确推断出哪些 bean 属于哪个名称空间?如果没有,我如何检查底层 API 以便做出准确的评估?

4

1 回答 1

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

于 2012-05-08T12:48:58.443 回答