spring入门--bean加载

作者: zhaoyunxing | 来源:发表于2017-11-09 20:51 被阅读68次

    [*] spring加载bean的两种方式

    [*] spring依赖注入方式

    [*] bean配置

    源码地址

    spring加载bean的两种方式

    • ClassPathXmlApplicationContext 从类路径下加载配置文件
    • FileSystemXmlApplicationContext 从系统文件加载配置文件
    • 两个都继承AbstractRefreshableConfigApplicationContext实现
    依赖关系图
      // ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    
    ApplicationContext ctx = new FileSystemXmlApplicationContext("F:\\code\\java\\springdemoroot\\spring4.0x\\src\\main\\resources\\applicationContext.xml");
    

    bean的获取

    • ctx.getBean(); 不赘述

    spring 依赖注入方式

    属性注入

    • 通过setter方法注入 eg: <property name="value" value="spring 4.3"/> (value与class类的setter方法名称对应)

    通过构造器注入

    • 重载构造器可以通过位置(index)、类型(type)、参数名称(name)区分
    • 基本类型、封装类、string 都可以使用<value>标签获取value属性注入
    • 特殊字符使用<![CDATA[]]>进行注入
    <!--通过构造器注入1-->
     <bean id="car" class="com.sunny.beans.di.Car">
        <constructor-arg index="0">
            <value><![CDATA[<Benchi^>]]></value>
        </constructor-arg>
        <constructor-arg index="1">
           <value>shanghai</value>
        </constructor-arg>
        <constructor-arg index="2">
           <value>3000</value>
        </constructor-arg>
    </bean>
    
    <!--通过构造器注入2-->
    <bean id="car2" class="com.sunny.beans.di.Car">
        <constructor-arg value="240" name="maxSpeed" type="int" index="2"></constructor-arg>
        <constructor-arg value="baoma" index="0"></constructor-arg>
         <constructor-arg value="shanghai" index="1"></constructor-arg>
    </bean>
    

    工厂方法注入(没有用过)

    bean配置

    内部bean配置

    • 不能被外部引用,只能在person内部使用
    <bean id="person2" class="com.sunny.beans.reference.Person">
       <property name="name" value="李四"></property>
        <property name="age" value="25"></property>
        <property name="car">
           <bean id="car3" class="com.sunny.beans.di.Car">
              <constructor-arg value="250" name="maxSpeed" type="int" index="2"></constructor-arg>
              <constructor-arg value="mazida" name="brand" index="0"></constructor-arg>                
             <constructor-arg value="shanghai" name="corp" index="1"></constructor-arg>
           </bean>
        </property>
    </bean>
    

    null值设置

    • 使用<null/>标签
      <bean id="person3" class="com.sunny.beans.reference.Person">
            <constructor-arg name="name" value="王五"/>
            <constructor-arg name="age" value="25"/>
            <constructor-arg name="car">
                <null/>
            </constructor-arg>
        </bean>
    

    给级联属性赋值

    • 属性(car)需要初始化后才可以级联赋值
    <bean id="person4" class="com.sunny.beans.reference.Person">
            <constructor-arg name="name" value="王五"/>
            <constructor-arg name="age" value="25"/>
            <constructor-arg name="car" ref="car"/>
            <!--使用级联修改小车的最大速度为100-->
            <property name="car.maxSpeed" value="100"></property>
    </bean>
    

    配置集合属性

    • spring 提供了xml标签(<list><set><map>)为集合赋值
    • 在集合标签可以通过<value>指定简单的常量值,<ref>指定bean的引用,<bean>内部bean定义
     <bean id="conllectionsPerson" class="com.sunny.beans.conllections.Person">
        <property name="name" value="钻石王老五"/>
        <property name="age" value="50"/>
        <property name="cars">
            <list>
                <ref bean="car"/>
                <ref bean="car2"/>
                    <!--<value type="com.sunny.beans.HelloWorld">sdfsd</value>-->
                <bean class="com.sunny.beans.di.Car">
                    <constructor-arg value="250" name="maxSpeed" type="int" index="2"></constructor-arg>
                    <constructor-arg value="mazida" name="brand" index="0"></constructor-arg>
                    <constructor-arg value="shanghai" name="corp" index="1"></constructor-arg>
                </bean>
            </list>
        </property>
    </bean>
    

    配置map属性

    • 通过<entry>标签的 key 和value-ref 绑定值
     <bean id="mapPerson" class="com.sunny.beans.conllections.MapPerson">
        <property name="name" value="老王"/>
        <property name="age" value="30"/>
        <property name="cars">
            <map>
                <entry key="AA" value-ref="car"></entry>
                <entry key="BB" value-ref="car2"></entry>
            </map>
        </property>
    </bean>
    

    配置 properties 属性值

    • 通过<entry>标签的 key 和value-ref 绑定值
    <bean id="dataSource" class="com.sunny.beans.properties.DataSource">
        <property name="properties">
            <props>
                <prop key="user">root</prop>
                <prop key="password">123456</prop>             
                <prop key="jdbcUrl">jdbc:mysql....</prop>
                <prop key="driverClass">com.mysql.jdbc.Driver</prop>
            </props>
        </property>
    </bean>
    

    配置单独的bean,提供多个bean引入

    • 使用<util:list>标签定义一个公用bean
    <util:list id="commonCars">
        <ref bean="car"/>
        <ref bean="car2"/>
    </util:list>
        <!--引入公用的bean-->
    <bean id="person5" class="com.sunny.beans.conllections.Person">
       <property name="name" value="引入公用的bean"/>    
       <property name="age" value="30"/>
       <property name="cars" ref="commonCars"/>
    </bean>
    

    通过p命名空间为bean属性赋值

    <bean id="person6" class="com.sunny.beans.reference.Person" p:age="20" p:name="通过p给bean属性赋值" p:car-ref="car"></bean>
    

    如果有写的不对的地方请指出

    我的微信号可以一起学习、讨论、纠错

    相关文章

      网友评论

        本文标题:spring入门--bean加载

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