这是否遵循XML的通用命名空间设计模式,以便我可以精确地推断出哪些bean属于哪个命名空间?如果没有,我如何检查底层API以进行准确评估?
答案 0 :(得分: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());
表示{x}处理spring xml中的<tx:advice>
语句。{1}}。您可以以类似的方式深入查看任何org.springframework.transaction.config.TxAdviceBeanDefinitionParser
和spring.handlers
。