1. 程式人生 > >Spring深入研究(一)

Spring深入研究(一)

Spring

建立Spring配置檔案

  • Spring配置檔案 名字位置不固定

    放在src目錄下面,命名applicationContext.xml

  • schema約束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
>
<bean id="foo" class="x.y.Foo"> <meta key="cacheName" value="foo"/> <property name="name" value="Rick"/> </bean> </beans>
  • bean例項化方式

第一種 使用類的無引數構造建立

第二種 使用靜態工廠建立

第三種使用例項工廠建立

  • bean 標籤常用屬性
  • id 屬性:

​ 起的名稱,任意命名,根據id得到配置物件

  • class屬性:

    要建立的bean的全路徑

  • name屬性:

    與id屬性作用相同(遺留問題)

  • scope屬性: Bean的作用範圍:

    singleton:預設值,單例的

    prototype:多例的

    request:物件存入到request域中

    session:物件存入到Session域中

    globalSession:如果沒有Porlet環境那麼globalSession相當於session

屬性注入

建立物件時候,向類裡面屬性裡面設定值

屬性注入三種方式:

  • 使用set方法注入
 <!--使用set方法注入屬性-->
<bean id="book" class="com.jia.property.Book">
<!--注入屬性值
  name屬性值:類裡面定義的屬性名稱
  value屬性:設定具體的值
-->
  <property name="bookname" value="易筋經"></property>
</bean>
  • 有引數構造器注入
<!--使用有引數構造注入屬性-->
<bean id="demo1" class="com.jia.property.PropertyDemo1">
<!--使用有參構造注入-->  
<constructor-arg name="username" value="小王小馬"></constructor-arg>
</bean>
  • 使用介面注入

注入物件型別屬性

<!--1配置service和dao物件-->
<bean id="userDao" class="com.jia.ioc.UserDao"></bean>
<bean id="userService" class="com.jia.ioc.UserService">
    <!--注入dao物件
        name屬性值:service類裡面屬性名稱
            不要使用value屬性,因為字串使用value,物件使用ref
        ref屬性:dao配置bean標籤中id值
    -->
  <property name="userDao" ref="userDao"></property>
</bean>

P名稱空間注入

xmlns:p="http://www.springframework.org/schema/p"
<!--p名稱空間注入-->
<bean id="person" class="com.jia.property.Person" p:pname="lucy"></bean>

注入複雜型別屬性

  • 1 陣列
  • 2 list集合
  • 3 map 集合
  • 4 properties 型別
<!--注入複雜型別屬性值 -->
  <bean id="person" class="com.jia.property.Person">
      <!--陣列 -->
      <property name="arrs">
          <list>
              <value>小王</value>
              <value>小馬</value>
              <value>小宋</value>
          </list>
      </property>
      <!-- list -->
      <property name="list">
          <list>
              <value>小奧</value>
              <value>小金</value>
              <value>小普</value>
          </list>
      </property>
      <!-- map -->
      <property name="map">
          <map>
              <entry key="aa" value="lucy"></entry>
              <entry key="bb" value="mary"></entry>
              <entry key="cc" value="tom"></entry>
          </map>
      </property>
      <!-- properties -->
      <property name="properties">
          <props>
              <prop key="driverclass">com.mysql.jdbc.Driver</prop>
              <prop key="username">root</prop>
              <prop key="password">root</prop>
          </props>
      </property>
  </bean>

IOC和DI區別

  • IOC: 控制反轉,把物件建立交給spring進行配置
  • DI: 依賴注入,向類裡面的屬性中設定值
  • 關係: 依賴注入不能單獨存在,需要在ioc基礎之上完成操作

Spring整合web專案原理

  • 1 載入Spring核心配置檔案
//載入spring配置檔案,根據建立物件
      ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

new 物件,功能可以實現,效率很低

  • 2 實現思想:把配置檔案和建立物件過程,在伺服器啟動時候完成
  • 3 實現原理

(1)ServletContext物件

(2)監聽器

(3)具體使用:

    • 在伺服器啟動時候,為每個專案建立一個ServletContext物件
    • 在ServletContext物件建立時候,使用監聽器可以具體到ServletCintext物件在什麼時候建立
    • 使用監聽器監聽到ServletContext物件建立時候,載入Spring配置檔案,把配置檔案配置物件建立
    • 把創建出來的物件放到ServletContext域物件裡面(setAttribute方法)
    • 獲取物件時候,到ServletContext域得到(getAttribute方法)