对xml文件头内容的理解xmlns xmlns:xsi xsi:schemaLocation

对xml文件头内容的理解xmlns xmlns:xsi xsi:schemaLocation

XML文件的结构一般如下

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
  
xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
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">  
  
<bean id="helloWorld" class="main.java.com.sommer.learn.HelloWorldImpl"></bean>  
  
</beans>  


上面代码的<bean id=”helloWorld ”  class=” main.java.com.sommer.learn.HelloWorldImpl”> </bean>,其中
helloWorld
表示bean的标识,
main.java.com.sommer.learn.HelloWorldImpl
表示bean的类。这只是bean的一种最简单的配置。


beans —— xml文件的根节点。


xmlns ——是XML NameSpace的缩写,因为XML文件的标签名称都是自定义的,自己写的和其他人定义的标签很有可能会重复命名,而功能却不一样,所以需要加上一个namespace来区分这个xml文件和其他的xml文件,类似于java中的package。

xmlns是XML Namespace 的缩写,这里表示spring 命名空间。Spring在Classpath中查找所有的 spring.handlers 并解析xml配置的命名空间与对应的处理类。命名空间的这些项目不是固定的,可从 http://www.springframework.org/schema/ 根据需求选择。

这里我们先不讨论它,主要看<bean> </bean>的组成结构,因为它表示如何从IoC容器中获取对象(bean)并完成我们所需要的功能。


xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance,是指具体用到的schema资源文件里定义的元素所准守的规范。即/spring-beans-2.0.xsd这个文件里定义的元素遵守什么标准。

xsi:schemaLocation——是指,本文档里的xml元素所遵守的规范,schemaLocation 属性用来引用(schema)模式文档,解析器可以在需要的情况下使用这个文档对 XML 实例文档进行校验。它的值(URI)是成对出现的,第一个值表示命名空间,第二个值则表示描述该命名空间的模式文档的具体位置,两个值之间以空格分隔。


bean的配置项具体如下:

全限定类名(class:用于定义Bean的实现类;

Bean行为:这些定义了Bean在容器中的行为;包括作用域(单例、原型创建)、是否惰性初始化及生命周期等;

Bean创建方式:说明是通过构造器还是工厂方法创建

Bean之间关系:即对其他bean的引用,也就是依赖关系定义,这些引用bean也可以称之为同事bean依赖bean,也就是依赖注入。

bean的命名

1.不指定id,只配置必须的全限定类名,由IoC容器为其生成一个标识,程序必须通过“getBean(Class<T> requiredType)”获取Bean

<bean class=”main.java.com.sommer.learn.HelloWorldImpl”></bean>

获取bean的程序

ApplicationContext apc = new ClassPathXmlApplicationContext("springXML/HelloWorld.xml");    
HelloWorld hello = apc.getBean(HelloWorld.class);    
System.out.println(hello.sayHi());   

2. 指定id,必须在Ioc容器中唯一;

<bean id=”helloWorld” class=”main.java.com.sommer.learn.HelloWorldImpl”></bean>

获取bean的程序

ApplicationContext apc = new ClassPathXmlApplicationContext("springXML/HelloWorld.xml");    
HelloWorld hello = apc.getBean("helloWorld",HelloWorld.class);    
System.out.println(hello.sayHi());  

3. 指定name,必须在Ioc容器中唯一

<bean name=”helloWorld” class=”main.java.com.sommer.learn.HelloWorldImpl”></bean>

获取bean的程序

ApplicationContext apc = new ClassPathXmlApplicationContext("springXML/HelloWorld.xml");    
HelloWorld hello = apc.getBean("helloWorld",HelloWorld.class);    
System.out.println(hello.sayHi()); 

4. 指定别名alias(一个bean可以有多个)

<bean name=”helloWorld”  alias=”alias1″  class=”main.java.com.sommer.learn.HelloWorldImpl”></bean>


获取bean的程序

ApplicationContext apc = new ClassPathXmlApplicationContext("springXML/HelloWorld.xml");    
HelloWorld hello = apc.getBean("alias1",HelloWorld.class);  //这里当然也可以根据name获得  
System.out.println(hello.sayHi());   

如果同时指定了idnameid就是标识符,而name就是别名,必须在Ioc容器中唯一;

如果指定多个name,第一个被用作标识符,其他的是别名,所有标识符也必须在Ioc容器中唯一;

注:nameid都作为“标识符”,那为什么还要同时存在呢?这是因为当使用基于XML的配置元数据时,在XMLid是一个真正的XML id属性,因此可以利用XML解析器来验证引用的这个id是否存在,从而更早的发现是否引用了一个不存在的bean,而使用name,则可能要在真正使用bean时才能发现引用一个不存在的bean

文章转自:http://blog.csdn.net/shymi1991/article/details/48106015

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106272.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • golang代理转发基础「建议收藏」

    golang代理转发基础「建议收藏」golang代理转发基础go标准库已经实现了一个反向代理工具,通过代理将客户端的请求转发到代理服务器。什么是反向代理?维基百科解释:”Incomputernetworks,areverseproxyisatypeofproxyserverthatretrievesresourcesonbehalfofaclientfromoneormore…

    2022年7月26日
    10
  • 为什么要了解计算机发展史,计算机发展史给我的启示

    为什么要了解计算机发展史,计算机发展史给我的启示计算机发展史给我的启示我们这个时代 是一个高速的信息时代 地球村 这个词早已不是新概念 我们现在真正做到了 秀才不出门全知天下事 而这些 归根结底是托了计算机的福了 计算机的发展我们的生活有了翻天覆地的变化 引领了一个新的时代 我很早接触计算机 但没想过了解它的发展史 更别提重大启示了 今天就简单的写点吧 最早的计算机起源于公元前 5 世纪 中国人发明的 就是算盘 并一直沿用至今 在某些运算上使用

    2025年7月4日
    0
  • Ubuntu10.04 下安装RabbitVCS

    Ubuntu10.04 下安装RabbitVCS安装RabbitVCS的方法步骤如下:1、sudoadd-apt-repositoryppa:rabbitvcs/ppa#将rabbitvcs的添加到源里面。(次操作会提示是否要添加到源里面,点击ENTER添加,ctrl+c不添加)2、sudoapt-keyadv–keyserverkeyserver.ubuntu.com–recv-keys34EF…

    2022年7月18日
    10
  • Canalyzer使用介绍

    Canalyzer使用介绍Canalyzer使用介绍什么是canalyzer?简单来说就是解析汽车can报文,可收可发,可记录可回播报文。汽车行业开发,测试,路试使用居多。下面主要分界面介绍,canalyzer设置,离线回放,在线回放等四大主要且常用功能去说明。一.Canlayzer界面介绍打开canalyzer工程左上方闪电标志是启动和暂停作用。panel是可用于添加panel界面,有助于调试。analysis&stimulation主菜单下有以下子菜单1.measurementset

    2022年6月15日
    70
  • 为什么说程序员做外包没前途呢_外包程序员

    为什么说程序员做外包没前途呢_外包程序员之前做过不到3个月的外包,2020的第一天就被释放了,2019年还剩1天,我从外包公司离职了。我就谈谈我个人的看法吧。首先我们定义一下什么是有前途 稳定的工作环境 不错的收入 能够在项目中不断提升自己的技能(ps:非技术上的认知也算) 找下家的时候能找到一份工资更高的工作 如果你目前还年轻,但高不成低不就,只有外包offer,那请往下看。外包公司你应该…

    2022年10月9日
    1
  • Python求解两数之和[通俗易懂]

    Python求解两数之和[通俗易懂]题目描述:写一个函数,此函数要实现以下功能:给一个列表,并且给一个目标数字,如果列表里的两个数字之和等于目标数字,返回那两个数字的索引值。比如,给定列表[3,5,7,14],目标数字是10,那么返回[0,2],0是3的索引,2是7的索引,3+7=10.注意,不可以重复利用列表中的某个数字,比如返回[1,1]是不能接受的。一、两层for循环遍历列表思路:先拿出列表里的第0个数…

    2022年5月5日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号