Bean配置文件之bean元素、alias元素、import元素

本文详细介绍了在Spring中如何使用bean元素定义Bean对象,包括bean名称和别名的设置规则,以及alias元素为Bean定义别名的方法。此外,还探讨了import元素的作用,用于引入其他配置文件,帮助理解Spring的XML配置和Bean管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 前言:

    • 在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充电社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值