大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

spring入门--bean加载

[*] 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>

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

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