1.3.1 Spring的概述
1.3.1.1 什麼是Spring
· Spring:SE/EE開發的一站式框架。
· 一站式框架:有EE開發的每一層解決方案。
· WEB層:SpringMVC
· Service層:Spring的Bean管理,Spring宣告式事務
· DAO層:Spring的Jdbc模板,Spring的ORM模組
1.3.1.2 為什麼學習Spring
1.3.1.3 Spring的版本
Spring3.x和Spring4.x
1.3.2 Spring的入門(IOC)
1.3.2.1 什麼IOC
· IOC: Inversion of Control(控制反轉)。
· 控制反轉:將物件的建立權反轉給(交給)Spring。
1.3.2.2 下載Spring的開發包
官網:
1.3.2.3 解壓Spring的開發包
· docs:Spring的開發規範和API
· libs:Spring的開發的jar和原始碼
· schema:Spring的配置檔案的約束
1.3.2.4 建立web專案,引入jar包
1.3.2.5 建立介面和類
· 問題:
· 如果底層的實現切換了,需要修改原始碼,能不能不修改程式原始碼對程式進行擴充套件?
1.3.2.6 將實現類交給Spring管理
在spring的解壓路徑下spring-framework-4.2.4.RELEASE\\docs\\spring-framework-reference\\html\\\\xsd-configuration.html
1.3.2.7 編寫測試類
1.3.2.8 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
1.4 Spring的工廠類
1.4.1 Spring的工廠類
1.4.1.1 Spring工廠類的結構圖
· ApplicationContext繼承BeanFactory。
1.4.1.2 BeanFactory:老版本的工廠類
· BeanFactory:呼叫getBean的時候,才會生成類的例項。
1.4.1.3 ApplicationContext:新版本的工廠類
· ApplicationContext:載入配置檔案的時候,就會將Spring管理的類都例項化。
· ApplicationContext有兩個實現類
· ClassPathXmlApplicationContext:載入類路徑下的配置檔案
· FileSystemXmlApplicationContext:載入檔案系統下的配置檔案
1.5 Spring的配置
1.5.1 XML的提示配置
1.5.1.1 Schema的配置
1.5.2 Bean的相關的配置
1.5.2.1 <bean>標籤的id和name的配置
· id:使用了約束中的唯一約束。裡面不能出現特殊字元的。
· name:沒有使用約束中的唯一約束(理論上可以出現重複的,但是實際開發不能出現的)。裡面可以出現特殊字元。
· Spring和Struts1框架整合的時候
· <bean name="/user"/>
1.5.2.2 Bean的生命週期的配置(了解)
· init-method:Bean被初始化的時候執行的方法
· destroy-method:Bean被銷燬的時候執行的方法(Bean是單例建立,工廠關閉)
1.5.2.3 Bean的作用範圍的配置(重點)
· scope:Bean的作用範圍
· singleton:預設的,Spring會採用單例模式建立這個物件。
· prototype:多例模式。(Struts2和Spring整合一定會用到)
· request:應用在web專案中,Spring建立這個類以後,將這個類存入到request範圍中。
· session:應用在web專案中,Spring建立這個類以後,將這個類存入到session範圍中。
· globalsession:應用在web專案中,必須在porlet環境下使用。但是如果沒有這種環境,相對於session。
1.6 Spring的Bean管理(XML方式)
1.6.1 Spring的Bean的例項化方式(了解)
Bean已經都交給Spring管理,Spring建立這些類的時候,有幾種方式:
1.6.1.1 無參構造方法的方式(預設)
· 編寫類
· 編寫配置
1.6.1.2 靜態工廠例項化的方式
· 編寫Bean2的靜態工廠
· 配置
1.6.1.3 例項工廠例項化的方式
· Bean3的例項工廠
· 配置
1.6.2 Spring的屬性注入
1.6.2.1 構造方法的方式的屬性注入
· 構造方法的屬性注入
1.6.2.2 Set方法的方式的屬性注入
· Set方法的屬性注入
· Set方法設定物件型別的屬性
1.6.2.3 P名稱空間的屬性注入(Spring2.5以後)
· 通過引入p名稱空間完成屬性的注入:
· 寫法:
· 普通屬性p:屬性名="值"
· 物件屬性p:屬性名-ref="值"
· P名稱空間的引入
· 使用p名稱空間
1.6.2.4 SpEL的屬性注入(Spring3.0以後)
· SpEL:Spring Expression Language,Spring的表示式語言。
· 語法:
· #{SpEL}
1.6.3 集合型別屬性注入(了解)
1.6.3.1 配置
<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
<property name="arrs">
<list>
<value>王東</value>
<value>趙洪</value>
<value>李冠希</value>
</list>
</property>
<property name="list">
<list>
<value>李兵</value>
<value>趙如何</value>
<value>鄧鳳</value>
</list>
</property>
<property name="set">
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
</property>
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
</bean>
1.7 Spring的分模組開發的配置
1.7.1 分模組配置
1.7.1.1 在載入配置檔案的時候,載入多個
1.7.1.2 在一個配置檔案中引入多個配置檔案
1.8 CRM的綜合案例
1.8.1 程式碼實現
1.8.1.1 建立資料庫和表
1.8.1.2 建立web專案,引入jar包
· 引入struts2的開發的jar包
· 引入struts2的配置檔案
· web.xml
· struts.xml
1.8.1.3 引入頁面
1.8.1.4 編寫Action類
1.8.1.5 配置Action
1.8.1.6 修改頁面提交到Action
1.8.1.7 編寫Action的save方法
· 不在Action中直接建立Service,將Service交給Spring管理。
· 建立Service介面和實現類
1.8.1.8 引入Spring的環境
· 引入jar包
· 引入配置檔案
1.8.1.9 將Service交給Spring
1.8.1.10 在Action中呼叫Service
1.8.1.11 編寫DAO並且完成配置
· 編寫DAO的介面和實現類
· 將DAO交給Spring管理
1.8.1.12 在Service中使用DAO
1.8.2 問題描述
1.8.2.1 程式問題
· 每次請求都會建立一個Spring的工廠,這樣浪費伺服器資源,應該一個專案只有一個Spring的工廠。
· 在伺服器啟動的時候,建立一個Spring的工廠。
· 建立完工廠,將這個工廠類儲存到ServletContext中。
· 每次使用的時候都從ServletContext中獲取。
· *****使用ServletContextListener
· 監聽ServletContext物件的建立和銷燬。
1.8.2.2 解決方案:使用Spring核心監聽器ContextLoaderListener(整合web專案)
· 引入jar包
spring-web.jar
· 配置監聽器
· 在Action中獲取工廠