zoukankan      html  css  js  c++  java
  • Spring第三篇:xml中bean的定义

      spring根据bean xml文件创建和管理对象,spring的容器创建好这些对象之后,我们如何获取和使用这些对象?我们需要根据在xml文件中定义的bean对象的名称标识,进行查找。常见的bean对象定义格式如下:

    beans是根元素,可以包含任意数量的import、bean和alias
        常见bean的定义标签如下:
        <import resource="classpath:/spring01/demo1/bean.xml"/>
        resource: 引入的其他bean定义文件
        <bean id="helloSpring" class="com.java.spring01.demo1.HelloSpring"/>
        id:bean标识
        class:bean所属的全路径类名称
        <alias name="helloSpring" alias="hello"/>
        name:bean标识
        alias:bean别名

      bean标签

    <bean id="bean唯一标识" name="bean名称" class="完整类型名称" factory-bean="工厂bean名称" factory-method="工厂方法"/>
    bean名称:每个bean都有一个名称,叫做bean名称,bean名称在一个spring容器中必须唯一,否则会报错,通过bean名称可以从spring容器获取对应的bean对象。
    bean别名:bean对象的外号,在spring中叫做bean的别名,spring容器允许使用者通过名称或者别名获取对应的bean对象

      bean名称和别名的定义生效规则

    名称和别名可以通过bean元素中的id和name来定义,具体定义规则如下:
    
    1、当id存在的时候,不管name有没有,取id为bean的名称
    2、当id不存在,此时需要看name,name的值可以通过,;或者空格分割,最后会按照分隔符得到一个String数组,数组的第一个元素作为bean的名称,其他的作为bean的别名
    3、当id和name都存在的时候,id为bean名称,name用来定义多个别名
    4、当id和name都不指定的时候,bean名称自动生成,生成规则下面详细说明

      测试案例,创建好UserModel对象,并在bean.xml文件中定义好bean的配置元数据信息

    <bean id="user1" class="com.java.spring01.demo2.UserModel"/>
        <bean name="user2" class="com.java.spring01.demo2.UserModel"/>
        <bean id="user3" name="user3_1" class="com.java.spring01.demo2.UserModel"/>
        <bean id="user4" name="user4_1,user4_2,user4_3" class="com.java.spring01.demo2.UserModel"/>
        <bean name="user5,user5_1,user5_2,user5_3" class="com.java.spring01.demo2.UserModel"/>

      test方法

    @Test
        public void tetsUser(){
            //1、配置bean.xml文件
            String beanXml = "classpath:/spring01/demo2/bean.xml";
            //2、根据xml配置文件获取spring的对象管理容器
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(beanXml);
            //3、在容器里面获取所有的对象,并打印出别名
    //        String[] beanDefinitionNames = context.getBeanDefinitionNames();
            for(String beanName : context.getBeanDefinitionNames()){
                String[] aliases = context.getAliases(beanName);//获取对象的别名,数组表示允许有多个
    
                System.out.println(String.format("beanName:%s, 别名:{%s}", beanName, String.join(",",aliases)));
            }
    
        }

      运行结果:

    beanName:user1, 别名:{}
    beanName:user2, 别名:{}
    beanName:user3, 别名:{user3_1}
    beanName:user4, 别名:{user4_1,user4_2,user4_3}
    beanName:user5, 别名:{user5_3,user5_1,user5_2}

      bean元素的id和name都未指定的时候,spring会使用完整类型加上编号生成bean名称,多个同一类型的bean未指定别名的话,只有第一个bean会使用完整类名自动生成别名。

      案例:按bean.xml文件中增加配置元数据信息

    <!--未指定id和name的时候,会自动生成名称和别名,同一个类多个bean未指定id和name-->
        <bean class="com.java.spring01.demo2.UserModel"/>
        <bean class="com.java.spring01.demo2.UserModel"/>
    
        <bean class="java.lang.String"/>
        <bean class="java.lang.String"/>

      test方法,运行结果:

    beanName:com.java.spring01.demo2.UserModel#0, 别名:{com.java.spring01.demo2.UserModel}
    beanName:com.java.spring01.demo2.UserModel#1, 别名:{}
    beanName:java.lang.String#0, 别名:{java.lang.String}
    beanName:java.lang.String#1, 别名:{}

       import元素:

      当我们的系统比较大的时候,会分成很多模块,每个模块会对应一个bean xml文件,我们可以在一个总的bean xml中对其他bean xml进行汇总,相当于把多个bean xml的内容合并到一个里面了,可以通过import元素引入其他bean配置文件。

      案例:在demo2.xml文件中增加import引入demo1的bean.xml文件

    <import resource="classpath:/spring01/demo1/bean.xml"/>

      test方法,运行结果:

    beanName:helloSpring, 别名:{}
  • 相关阅读:
    iqueryable lambda表达式
    win10安装后耳机有声音而外放无声音
    Coursera机器学习week11 笔记
    Coursera机器学习week10 单元测试
    Coursera机器学习week10 笔记
    Coursera机器学习week9 编程作业
    Coursera机器学习week9 单元测试
    Coursera机器学习week9 笔记
    Coursera机器学习week8 编程作业
    Coursera机器学习week8 单元测试
  • 原文地址:https://www.cnblogs.com/8593l/p/12830136.html
Copyright © 2011-2022 走看看