【Spring4(一)】Spring的概述、入門、Bean管理和屬性注入
阿新 • • 發佈:2018-11-15
Spring的概述
Spring的概述
什麼是Spring
- Spring:SE/EE開發的一站式框架。
- 一站式框架:有EE開發的每一層解決方案。
- WEB層 :SpringMVC
- Service層 :Spring的Bean管理,Spring宣告式事務
- DAO層 :Spring的Jdbc模板,Spring的ORM模組
- 一站式框架:有EE開發的每一層解決方案。
為什麼學習Spring
Spring的版本
Spring3.x和Spring4.x
Spring的入門(IOC)
什麼是IOC
- IOC: Inversion of Control(控制反轉)。
- 控制反轉:將物件的建立權反轉給(交給)Spring。
下載Spring的開發包
解壓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}
- #{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
- web.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中獲取工廠