美文网首页
从0开始的Spring(03)-配置Bean

从0开始的Spring(03)-配置Bean

作者: 住阳台的猫 | 来源:发表于2019-08-26 10:23 被阅读0次

    1 配置形式:基于XML文件的方式;基于注解的方式

    1.1 基于XML文件的方式

        <!--  配置Bean  -->
        <bean id="helloWorld" class="com.trainee.HelloWorld">
            <property name="name" value="Spring"></property>
        </bean>
    
    • class:Bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参构造器
    • id: Bean的名称
      --标识容器中的Bean,id唯一
      --若id没有指定,Spring自动将权限定性类名作为Bean的名字
      --id可以指定多个名字,名字之间可以用逗号、分号或空格隔开

    1.2 基于注解的方式

    2 Bean的配置方式:通过全类名(反射);通过工厂方法(静态工厂方法&实例工厂方法);FactoryBean

    2.1 通过全类名(反射)

            //利用id定位到IOC容器中的Bean
            HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
            //利用类型返回IOC容器重的Bean,但要求IOC容器中必须只能有一个该类型的Bean
            HelloWorld helloWorld1 = ctx.getBean(HelloWorld.class);
    

    2.2 通过工厂方法(静态工厂方法&实例工厂方法)

    2.3 FactoryBean

    3 IOC容器BeanFactory&ApplicationContext概述

    在Spring IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化,只有在容器实例化之后,才可以从IOC容器里获取Bean实例并使用。Spring提供了两种类型的IOC容器实现:BeanFactory和ApplicationContext

    BeanFactory:IOC容器的基本实现
    ApplicationContext:提供了更多的高级特性,是BeanFactory的子接口

    • BeanFactory是Spring框架的基础设施,面向Springbenshen
    • ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory
    • 无论使用何种方式,配置方式是相同的

    3.1 BeanFactory

    3.2 ApplicationContext

    • ApplicationContext的主要实现类:
      1.ClassPathXmlApplicationContext:从类路径下加载配置文件
      2.FileSystemXmlApplicationContext:从文件系统中加载配置文件
    • ConfigurableApplicationContext扩展于ApplicationContext,新增两个主要方法:refresh()和close(),让ApplicationContext具有启动、刷新和关闭上下文的能力
    • ApplicationContext在初始化上下文时就实例化所有单例的Bean
    • WebApplicationContext是专门为Web应用而准备的,它允许从相对于Web根目录的路径中完成初始化工作

    4 依赖注入的方式:属性注入;构造方法注入;工厂方法注入

    4.1 属性注入

    • 属性注入即通过setter方法注入Bean的属性值或依赖的对象
    • 属性注入使用<property>元素,使用name属性制定Bean的属性名称,value属性或<value>子节点指定属性值
    • 属性注入是实际应用中最常用的注入方式
        <bean id="helloWorld" class="com.trainee.HelloWorld">
            <property name="name" value="Spring"></property>
        </bean>
    

    4.2 构造方法注入

    • 通过构造方法注入注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用
    • 构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性
        <bean id="car" class="com.trainee.Car">
            <constructor-arg value="Audi" index="0"></constructor-arg>
            <constructor-arg value="ShangHai" index="1"></constructor-arg>
            <constructor-arg value="300000" type="double"></constructor-arg>
        </bean>
    
        <bean id="car2" class="com.trainee.Car">
            <constructor-arg value="BaoMa" type="java.lang.String"></constructor-arg>
            <constructor-arg value="ShangHai" type="java.lang.String"></constructor-arg>
            <constructor-arg value="300" type="int"></constructor-arg>
        </bean>
    

    使用构造器注入属性值可以指定参数的位置(index)和参数的类型(type),以区分重载的构造器

    字面值:可用字符串表示的值,可以通过<value>元素标签或value属性进行注入
    基本数据类型及封装类、String等类型都可以采取字面值注入的方式
    若字面值中包含特殊字符可以使用<![CDATA[]]>把字面值包裹起来

    例如 < 和 > 再xml中是特殊字符,如果在字符串中出现了这些字符,就需要使用<![CDATA[]]>
        <constructor-arg  type="java.lang.String">
            <value><![CDATA[<ShangHai>]]></value>
        </constructor-arg>
    

    引用其他的Bean
    组成应用程序的Bean经常需要相互协作以完成应用程序的功能。要使Bean能够互相访问,就必须在Bean配置文件中指定对Bean的引用
    在Bean的配置文件中,可以通过<ref>元素或ref属性为Bean的属性或构造器参数指定对Bean的引用
    也可以在属性或构造器里包含Bean的声明,这样的Bean称为内部Bean
    内部Bean
    当Bean实例仅仅给一个特定的属性使用时,可以将其声明为内部Bean,内部Bean的声名直接包含在<property>或<constructor-arg>元素里,不需要设置id或name属性
    内部不能使用在其他任何地方

        <bean id="person" class="com.trainee.Person">
            <property name="name" value="Tom"></property>
            <property name="age" value="20"></property>
            <!--
            <property name="car" ref="car2"></property>
            -->
            <property name="car">
                <bean class="com.trainee.Car">
                    <constructor-arg value="ffff"></constructor-arg>
                    <constructor-arg value="Changan"></constructor-arg>
                    <constructor-arg value="202020" type="double"></constructor-arg>
                </bean>
            </property>
        </bean>
    

    集合属性
    在Spring中可以通过一组内置的xml标签(例如:<list>,<set>,<map>)来配置集合属性
    配置java.util.List类型的属性,需要指定<list>标签,在标签里包含一些元素,这些标签可以通过<value>指定简单的常量值,通过<ref>指定对其他Bean的引用,通过<Bean>指定内置Bean定义。通过<null/>指定空元素,甚至可以内嵌其他集合
    数组的定义和List一样,都使用<list>
    配置java.util.Set需要使用<set>标签,定义元素的方法与List一样

    4.3 工厂方法注入(很少使用,不推荐)

    相关文章

      网友评论

          本文标题:从0开始的Spring(03)-配置Bean

          本文链接:https://www.haomeiwen.com/subject/jeqmkctx.html