Spring之旅第三篇-Spring配置詳解

上一篇學習了IOC的概念並初步分析了實現原理,這篇主要學習Spring的配置,話很少說,讓咱們開始!java

1、Bean元素配置

1.1 基本配置

看一個最基本的bean配置mysql

<bean name="hello" class="com.yuanqinnan.test.HelloWorld"></bean>

上面的配置中,咱們將bean交給spring管理,看其中屬性字段:web

  • class:被管理對象的完整類名spring

  • name:被管理對象的名稱,能夠經過名稱獲取改對象(能夠重複,可使用特殊字符)sql

  • id:與name做用相同(不能夠重複,不可使用特殊字符)數組

1.2 bean的進階配置

scope屬性session

  • singleton:定義bean的範圍爲每一個Spring容器一個實例(默認值)app

  • prototype:定義bean能夠被屢次實例化(使用一次就建立一次)函數

  • request:定義bean的範圍是HTTP請求,只有再使用有web能力的spring上下文時有效。學習

  • request:定義bean的範圍是HTTP請求,只有再使用有web能力的spring上下文時有效。

  • global-session:定義bean的範圍是全局HTTP會話,只有再portlet上下文中有效。

生命週期屬性

  • init-method:配置一個方法做爲生命週期初始化方法.spring會在對象建立以後當即調用.

  • destory-method:配置一個方法做爲生命週期的銷燬方法.spring容器在關閉並銷燬全部容器中的對象以前調用.

    代碼以下

<bean id="hello"  init-method="getInfo" destroy-method="destory" class="com.yuanqinnan.test.HelloWorld">
</bean>

注意,只有singleton的bean,destory-method纔有效

1.3實例化bean的方式

  1. 使用類構造器實例化(默認無參數)

<bean id="hello" class="com.yuanqinnan.test.HelloWorld">
</bean>
  1. 使用靜態工廠方法實例化(簡單工廠模式)

public class HellowWorldFactory {
    public static HelloWorld createHellowWorld(){
        return  new HelloWorld();
    }
}
<bean name="hello2" 
          class="com.yuanqinnan.test.HellowWorldFactory"
          factory-method="createHellowWorld">
    </bean>
  1. 使用實例工廠方法實例化(工廠方法模式)

public class HellowWorldFactory2 {
    public  HelloWorld createHellowWorld(){
        return new HelloWorld();
    }
}
<bean id="HellowWorldFactory2" class="com.yuanqinnan.test.HellowWorldFactory2"/>
    <bean id="hello3" factory-bean="HellowWorldFactory2" factory-method="createHellowWorld" />


1.4 spring的分模塊配置

spring 容許多個文件進行配置,能夠按照模塊來進行配置

<import resource="applicationContext2.xml"></import>

2、spring 屬性注入

2.1 set方法注入

<bean>元素的<property>子元素指明瞭使用它們的set方法來注入,可使用property的value屬性來注入簡單類型

<bean name="user" class="com.yuanqinnan.test.User">
        <!--值類型注入-->
        <property name="age" value="18"></property>
        <property name="name" value="tom"></property>
        <!-- 引用類型注入-->
        <property name="car" ref="car"></property>
    </bean>
    <bean name="car" class="com.yuanqinnan.test.Car">
        <property name="color" value="blue"></property>
    </bean>

User類與Car類代碼就不貼了,應該是能夠看得懂。

2.2 構造函數注入

使用constructor-arg來完成構造方法的注入,注入的方式和setter方式注入相同。 能夠經過type屬性,控制注入的類型 能夠經過index屬性,控制注入的順序 能夠經過name屬性,控制注入的名字

<bean name="user2" class="com.yuanqinnan.test.User">
        <constructor-arg name="name" index="0" type="java.lang.String" value="lucy"></constructor-arg>
        <constructor-arg name="age" index="1" type="java.lang.Integer" value="20"></constructor-arg>
        <constructor-arg name="car" ref="car"></constructor-arg>
    </bean>

2.3 spel注入

<bean name="user3" class="com.yuanqinnan.test.User">
    <property name="name" value="#{user.name}"></property>
    <property name="age" value="#{user2.age}"></property>
    <!-- 引用類型注入 爲car屬性注入下方配置的car對象-->
    <property name="car" ref="car"></property>
</bean>

3、複雜類型注入

3.1 數組

<property name="arr">
    <array>
        <value>tom</value>
        <value>lucy</value>
        <ref bean="user2"></ref>
    </array>
</property>

 

3.2 List

<property name="list">
    <list>
        <value>tom</value>
        <value>lucy</value>
        <ref bean="user2"></ref>
    </list>
</property>

3.3 Set

<property name="set">
    <set>
        <value>com.jbdc.mysql.Driver</value>
        <value>root</value>
        <ref bean="user"/>
    </set>
</property>

 

3.4 Map

<property name="map">
    <map>
        <entry key="url" value=""></entry>
        <entry key="user" value-ref="user"></entry>
        <entry key-ref="user3" value-ref="user2"></entry>
    </map>
</property>

3.5 Properties

<property name="prop">
    <props>
        <prop key="url">com.jbdc.mysql.Driver</prop>
        <prop key="userName">root</prop>
        <prop key="password">1234</prop>
    </props>
</property>

總結:以上是spring的配置詳解,都是經過XML裝配,下一篇咱們學習註解配置

相關文章
相關標籤/搜索