1. 程式人生 > >【Spring4(一)】Spring的概述、入門、Bean管理和屬性注入

【Spring4(一)】Spring的概述、入門、Bean管理和屬性注入

Spring的概述

Spring的概述

什麼是Spring

​​在這裡插入圖片描述

  • Spring:SE/EE開發的一站式框架。
    • 一站式框架:有EE開發的每一層解決方案。
      • WEB層 :SpringMVC
      • Service層 :Spring的Bean管理,Spring宣告式事務
      • DAO層 :Spring的Jdbc模板,Spring的ORM模組

為什麼學習Spring

在這裡插入圖片描述

Spring的版本

Spring3.x和Spring4.x

Spring的入門(IOC)

什麼是IOC

  • IOC: Inversion of Control(控制反轉)。
    • 控制反轉:將物件的建立權反轉給(交給)Spring。

下載Spring的開發包

官網:http://spring.io/

解壓Spring的開發包

在這裡插入圖片描述

  • docs :Spring的開發規範和API
  • libs :Spring的開發的jar和原始碼
  • schema :Spring的配置檔案的約束

建立web專案,引入jar包

在這裡插入圖片描述
在這裡插入圖片描述

建立介面和類

在這裡插入圖片描述
在這裡插入圖片描述

  • 如果底層的實現切換了,需要修改原始碼,能不能不修改程式原始碼對程式進行擴充套件?
    在這裡插入圖片描述

將實現類交給Spring管理

在spring的解壓路徑下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
在這裡插入圖片描述

編寫測試類

在這裡插入圖片描述

IOC 和 DI(*****)

  • IOC:控制反轉,將物件的建立權反轉給了Spring。
    • DI:依賴注入,前提必須有IOC的環境,Spring管理這個類的時候將類的依賴的屬性注入(設定)進來。
  • 面向物件的時候
    • 依賴
Class A
{ } Class B{ public void xxx(A a){ } }
- 繼承:is a
Class A{

}
Class B extends A{

}
- 聚合:has a

Spring 的工廠類

Spring 的工廠類

Spring工廠類的結構圖

在這裡插入圖片描述
ApplicationContext繼承BeanFactory。

BeanFactory:老版本的工廠類

BeanFactory:呼叫getBean的時候,才會生成類的例項。

ApplicationContext :新版本的工廠類

  • ApplicationContext:載入配置檔案的時候,就會將Spring管理的類都例項化。
  • ApplicationContext有兩個實現類
    • ClassPathXmlApplicationContext :載入類路徑下的配置檔案
    • FileSystemXmlApplicationContext :載入檔案系統下的配置檔案

Spring 的配置

XML 的提示配置

Schema 的配置

在這裡插入圖片描述

Bean 的相關的配置

Bean標籤的id和name的配置

  • id :使用了約束中的唯一約束。裡面不能出現特殊字元的。
  • name :沒有使用約束中的唯一約束(理論上可以出現重複的,但是實際開發不能出現的)。裡面可以出現特殊字元。
    • Spring和Struts1框架整合的時候
    <bean name=”/user” class=””/>
    

Bean的生命週期的配置(瞭解)

  • init-method :Bean被初始化的時候執行的方法
  • destroy-method :Bean被銷燬的時候執行的方法(Bean是單例建立,工廠關閉)

Bean的作用範圍的配置(重點)

  • scope :Bean的作用範圍
    • singleton :預設的,Spring會採用單例模式建立這個物件。
    • prototype :多例模式。(Struts2和Spring整合一定會用到)
    • request :應用在web專案中,Spring建立這個類以後,將這個類存入到request範圍中。
    • session :應用在web專案中,Spring建立這個類以後,將這個類存入到session範圍中。
    • globalsession :應用在web專案中,必須在porlet環境下使用。但是如果沒有這種環境,相對於session。

Spring 的Bean管理(XML方式)

Spring的Bean的例項化方式(瞭解)

Bean已經都交給Spring管理,Spring建立這些類的時候,有幾種方式:

無參構造方法的方式(預設)

  • 編寫類
    在這裡插入圖片描述
  • 編寫配置
    在這裡插入圖片描述

靜態工廠例項化的方式

  • 編寫Bean2的靜態工廠
    在這裡插入圖片描述
  • 配置
    在這裡插入圖片描述

例項工廠例項化的方式

  • Bean3的例項工廠
    在這裡插入圖片描述
  • 配置
    在這裡插入圖片描述

Spring 的屬性注入

在這裡插入圖片描述

構造方法方式的屬性注入

  • 構造方法的屬性注入
    在這裡插入圖片描述

Set方法的方式的屬性注入

  • Set方法的屬性注入
    在這裡插入圖片描述
  • Set方法設定物件型別的屬性
    在這裡插入圖片描述

P名稱空間的屬性注入(Spring2.5以後)

  • 通過引入p名稱空間完成屬性的注入:
    • 寫法:
      • 普通屬性 p:屬性名=“值”
      • 物件屬性 p:屬性名-ref=“值”
  • p 名稱空間的引入
    在這裡插入圖片描述
  • 使用p名稱空間
    在這裡插入圖片描述

SpEL的屬性注入(Spring3.0以後)

  • SpEL:Spring Expression Language,Spring的表示式語言。
    • 語法:
      • #{SpEL}
        在這裡插入圖片描述

集合型別屬性注入(瞭解)

配置

<!-- Spring的集合屬性的注入============================ -->
	<!-- 注入陣列型別 -->
	<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
		<!-- 陣列型別 -->
		<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>
		
		<!-- 注入set集合 -->
		<property name="set">
			<set>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</set>
		</property>
		
		<!-- 注入Map集合 -->
		<property name="map">
			<map>
				<entry key="aaa" value="111"/>
				<entry key="bbb" value="222"/>
				<entry key="ccc" value="333"/>
			</map>
		</property>
	</bean>

Spring的分模組開發的配置

分模組配置

在載入配置檔案的時候,載入多個

在這裡插入圖片描述

在一個配置檔案中引入多個配置檔案

在這裡插入圖片描述

CRM的綜合案例

搭建環境

建立資料庫和表

建立web專案,引入jar包

  • 引入struts2的開發的jar包
  • 引入struts2的配置檔案
    • web.xml
      在這裡插入圖片描述
    • struts.xml

引入頁面

編寫Action類

在這裡插入圖片描述

配置Action

在這裡插入圖片描述

修改頁面提交到Action

在這裡插入圖片描述

編寫Action的save方法

  • 不在Action中直接建立Service,將Service交給Spring管理。
  • 建立Service介面和實現類
    在這裡插入圖片描述
    在這裡插入圖片描述

引入Spring的環境

  • 引入jar包
  • 引入配置檔案

將Service交給Spring

在這裡插入圖片描述

在Action中呼叫Service

在這裡插入圖片描述

編寫DAO並且完成配置

  • 編寫DAO的介面和實現類
    在這裡插入圖片描述
    在這裡插入圖片描述
  • 將DAO交給Spring管理
    在這裡插入圖片描述

在Service中使用DAO

在這裡插入圖片描述
在這裡插入圖片描述

問題描述

程式問題

  • 每次請求都會建立一個Spring的工廠,這樣浪費伺服器資源,應該一個專案只有一個Spring的工廠。
    • 在伺服器啟動的時候,建立一個Spring的工廠。
    • 建立完工廠,將這個工廠類儲存到ServletContext中。
    • 每次使用的時候都從ServletContext中獲取。
  • *****使用ServletContextListener
    • 監聽ServletContext物件的建立和銷燬。

解決方案:使用Spring核心監聽器ContextLoaderListener(整合web專案)

  • 引入jar包
    spring-web.jar
  • 配置監聽器
    在這裡插入圖片描述
  • 在Action中獲取工廠
    在這裡插入圖片描述

在這裡插入圖片描述