<beans:beans>和<beans>的含义是什么

时间:2015-04-29 11:28:50

标签: java xml spring-mvc

之间有什么区别
<beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:p="http://www.springframework.org/schema/p"  
xmlns:context="http://www.springframework.org/schema/context"  
xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">  

<beans:beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:p="http://www.springframework.org/schema/p"  
xmlns:context="http://www.springframework.org/schema/context"  
xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

请您解释一下这两者之间的区别。

5 个答案:

答案 0 :(得分:1)

这是一个用于分隔潜在冲突元素名称的XML命名空间,因此没有真正的区别。

XML Namespaces

答案 1 :(得分:1)

它们是等价的。 您可以说元素的全名是ns:elementName 例如:

http://www.springframework.org/schema/beans : beans

如果您说 xmlns =“http://www.springframework.org/schema/beans”而不是“如果您看到没有名称空间前缀的元素,则假设默认名称空间为” http://www.springframework.org/schema/beans

如果你说 xmlns:beans =“http://www.springframework.org/schema/beans”而不是它意味着“如果你看到一个带有beans:前缀的元素,假设它是速记为“http://www.springframework.org/schema/beans

答案 2 :(得分:1)

理解这一点的关键是xmlns值。在这两种情况下:

xmlns="http://www.springframework.org/schema/beans"

这指定了文档的默认架构。这意味着XML中的每个标记都应该是此模式的一部分,除非明确指定它所属的其他模式。

指定标记来自其他模式通常由<schemaName:tagName>模式完成。因此,例如,如果标记name是模式foo的一部分,则必须将其与<foo:name>一起使用。

选择文档的默认架构时,您可以跳过架构名称,就像您使用<beans>的示例一样。在这种情况下,必须在架构中指定<beans>标记,并使用xmlns指向。

在另一种情况下,您明确指定标记beans是包含别名beans的模式的一部分,结果为<beans:beans>。但是,如果您没有xmlns:beans=http://www.springframework.org/schema/beans定义,则会导致XML格式无效。

就个人而言,我更喜欢始终明确提供架构别名。

答案 3 :(得分:1)

第一个是正确的,第二个是不正确的。差异来自您的默认命名空间&#34;。您的默认名称空间为beans。如果您的默认命名空间是其他内容,例如context,那么您需要明确定义beans命名空间(您在示例中没有完成)并使用{{ 1}}风格。

嵌套beans:beans元素有一个不同的用例,您可以在根<beans>标记中使用新的<beans>标记:

  

用于定义具有特定默认值的bean子集,或仅在某些配置文件处于活动状态时注册。必须将任何此类嵌套元素声明为文档中的最后一个元素。

但您的示例与此无关。

答案 4 :(得分:1)

简单地说,它允许您不要在您选择的属于默认命名空间的元素前面添加命名空间。 的xmlns = “命名空间” 从以上示例中可以: i)xmlns =“http://www.springframework.org/schema/beans”

然后你可以使用元素&lt; beans&gt;以及&lt; beans:beans&gt; - 明确的语法。

ii)xmlns =“http://www.springframework.org/schema/p”

然后你可以使用&lt; p&gt;以及&lt; xmlns:p&gt; - 明确的语法。

注意:您只能使用xmlns设置默认命名空间!