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, 别名:{}
  • 相关阅读:
    88. Merge Sorted Array
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    83. Remove Duplicates from Sorted List
    82. Remove Duplicates from Sorted List II
    81. Search in Rotated Sorted Array II
    80. Remove Duplicates from Sorted Array II
    计算几何——点线关系(叉积)poj2318
  • 原文地址:https://www.cnblogs.com/8593l/p/12830136.html
Copyright © 2011-2022 走看看