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());
如果同时指定了id和name,id就是标识符,而name就是别名,必须在Ioc容器中唯一;
如果指定多个name,第一个被用作标识符,其他的是别名,所有标识符也必须在Ioc容器中唯一;
注:name或id都作为“标识符”,那为什么还要同时存在呢?这是因为当使用基于XML的配置元数据时,在XML中id是一个真正的XML id属性,因此可以利用XML解析器来验证引用的这个id是否存在,从而更早的发现是否引用了一个不存在的bean,而使用name,则可能要在真正使用bean时才能发现引用一个不存在的bean。
文章转自:http://blog.csdn.net/shymi1991/article/details/48106015
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106272.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...