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

2019-08-26  本文已影响0人  住阳台的猫

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

1.1 基于XML文件的方式

    <!--  配置Bean  -->
    <bean id="helloWorld" class="com.trainee.HelloWorld">
        <property name="name" value="Spring"></property>
    </bean>

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的子接口

3.1 BeanFactory

3.2 ApplicationContext

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

4.1 属性注入

    <bean id="helloWorld" class="com.trainee.HelloWorld">
        <property name="name" value="Spring"></property>
    </bean>

4.2 构造方法注入

    <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 工厂方法注入(很少使用,不推荐)

上一篇下一篇

猜你喜欢

热点阅读