-
前言:
-
在Spring家族项目中,我们经常使用注解来配置Bean对象,很少用到xml配置文件
-
原因:
- 因为使用注解来配置Bean对象,只需加个注解即可
- 而xml配置Bean对象,则需要写大量的bean元素,容易造成配置文件的繁冗
-
但是掌握如何创建xml配置文件,有助于我们快速掌握相关注解的作用
-
案例源码:码云仓库的base-002子项目
1、bean元素
-
作用:用来定义一个bean对象
-
基本格式:
<bean id="bean唯一标识(bean名称)" name="bean名称或别名" class="完整类型名称" />
- class为必需项
-
bean名称:
- 每个bean对象都有一个名称,即bean名称。该名称在容器中是唯一的,否则会报错
- 在bean元素中,
id和name均可定义bean名称
。name定义bean名称,看下面的bean名称与别名定义规则部分
-
bean别名:
- 每个bean对象除了bean名称外,还可以有许多别名。Spring容器允许通过bean名称或别名来获取bean对象
- 取别名有两种方式:1)bean元素的name属性指定;2)alias元素
-
bean名称与别名的定义规则
-
name的值可以通过分隔符
,;或者空格
进行分割,按照分隔符得到一个String数组,取数组的第一个元素为bean名称,其余作为bean别名bean名称与别名的定义规则 bean名称 bean别名 若id、name均存在 取id值 取name值 若id存在,name不存在 取id值 无 若id不存在,name存在,取决于name 取name数组的第一个元素 取name数组除第一个元素的其它元素 若id、name均不存在 完整类名#数字编号 第一个bean对象有别名,取值为完整类名 -
若id、name均不存在,bean名称、别名由Spring容器自动生成
- bean名称:完整类名#数字编号,数字编号从0开始。如java.lang.String#0,java.lang.String#1
- bean别名:完整类名。若有2个及以上的bean对象均未指定id、name,则只有第一个bean对象有别名,其余为空
-
-
案例
-
演示bean名称与别名的用法
-
要用到的两个方法
//通过bean名称获取该bean的所有别名 String[] getAliases(String var1); //返回spring容器中定义的所有bean名称 String[] getBeanDefinitionNames();
-
配置文件applicationContext.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- id,name均存在--> <bean id="study1" name="study1_1" class="com.spring.study.SpringStudy" /> <bean id="study2" name="study2_1,study2_2;study2_3 study2_4" class="com.spring.study.SpringStudy"/> <!--id存在,name不存在--> <bean id="study3" class="com.spring.study.SpringStudy"/> <!--id不存在,name存在--> <bean name="study4,study4_1;study4_2 study4_3" class="com.spring.study.SpringStudy"/> <bean name="study5" class="com.spring.study.SpringStudy"/> <!-- id,name均不存在--> <bean class="com.spring.study.SpringStudy"/> <bean class="com.spring.study.SpringStudy"/> </beans>
-
实体类
package com.spring.study; public class SpringStudy { public void show(){ System.out.println("Hello, Spring World!"); } }
-
测试类
package com.spring.test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestBeanNameAndAlias { public static void main(String[] args) { // 1、定义bean配置文件位置 String classPathXml = "classpath:applicationContext.xml"; // 2、创建ClassPathXmlApplicationContext容器,给容器指定需要加载的bean配置文件 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(classPathXml); // 3、获取bean名称和别名 System.out.println("================Spring容器创建的所有的bean对象名称和别名如下================"); for (String beanName : context.getBeanDefinitionNames()){ //获取bean别名 String[] aliases = context.getAliases(beanName); System.out.println(String.format("bean名称:%s,bean别名:[%s]",beanName,String.join(",",aliases))); } } }
-
运行结果
================Spring容器创建的所有的bean对象名称和别名如下================ bean名称:study1,bean别名:[study1_1] bean名称:study2,bean别名:[study2_1,study2_3,study2_2,study2_4] bean名称:study3,bean别名:[] bean名称:study4,bean别名:[study4_2,study4_3,study4_1] bean名称:study5,bean别名:[] bean名称:com.spring.study.SpringStudy#0,bean别名:[com.spring.study.SpringStudy] bean名称:com.spring.study.SpringStudy#1,bean别名:[] Process finished with exit code 0
-
2、alias元素
-
作用:用于给bean对象定义别名
-
基本格式:
<alias name="要定义别名的bean对象的bean名称" alias="别名" />
-
案例
-
演示alias元素的用法
-
配置文件testContext.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="springStudy" class="com.spring.study.SpringStudy"/> <alias name="springStudy" alias="springStudy2"/> <alias name="springStudy" alias="springStudy3"/> </beans>
-
实体类
package com.spring.study; public class SpringStudy { public void show(){ System.out.println("Hello, Spring World!"); } }
-
测试类
package com.spring.test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAlias { public static void main(String[] args) { // 1、定义bean配置文件位置 String classPathXml = "classpath:testContext.xml"; // 2、创建ClassPathXmlApplicationContext容器,给容器指定需要加载的bean配置文件 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(classPathXml); // 3、获取Spring容器中某个bean对象的别名 String[] aliases = context.getAliases("springStudy"); System.out.println(String.format("bean名称:%s,bean别名:[%s]","springStudy",String.join(",",aliases))); } }
-
运行结果
bean名称:springStudy,bean别名:[springStudy2,springStudy3]
-
3、import元素
-
作用:引入其它配置文件
-
基本格式:
<import resource="其他配置文件的位置" />
-
用到的配置文件是上面的两个配置文件applicationContext.xml和testContext.xml,applicationContext.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- id,name均存在--> <bean id="study1" name="study1_1" class="com.spring.study.SpringStudy" /> <bean id="study2" name="study2_1,study2_2;study2_3 study2_4" class="com.spring.study.SpringStudy"/> <!--id存在,name不存在--> <bean id="study3" class="com.spring.study.SpringStudy"/> <!--id不存在,name存在--> <bean name="study4,study4_1;study4_2 study4_3" class="com.spring.study.SpringStudy"/> <bean name="study5" class="com.spring.study.SpringStudy"/> <!-- id,name均不存在--> <bean class="com.spring.study.SpringStudy"/> <bean class="com.spring.study.SpringStudy"/> <alias name="study1" alias="study1_2"/> <alias name="study1" alias="study1_3"/> <!-- 引入testContext.xml配置文件--> <import resource="classpath:testContext.xml"/> </beans>
-
实体类
package com.spring.study; public class SpringStudy { public void show(){ System.out.println("Hello, Spring World!"); } }
-
测试类
package com.spring.test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestImport { public static void main(String[] args) { // 1、定义bean配置文件位置 String classPathXml = "classpath:applicationContext.xml"; // 2、创建ClassPathXmlApplicationContext容器,给容器指定需要加载的bean配置文件 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(classPathXml); // 3、获取Spring容器中某个bean对象的别名 String[] aliases = context.getAliases("springStudy"); System.out.println(String.format("bean名称:%s,bean别名:[%s]","springStudy",String.join(",",aliases))); } }
-
运行结果
bean名称:springStudy,bean别名:[springStudy2,springStudy3]
参考:Java充电社