Spring概念
-
spring是開源的輕量級的框架
-
spring核心主要兩部分:
-
aop 面向切面編程,擴展功能不是修改源代碼實現
-
ioc 控制反轉, 比如有一類,在類裏有一個方法(不是靜態方法),調用類裏面的方法,創建類的對象,使用對象調用方法,創建類對象的過程,需要new出來對象
把對象的創建不是通過new方式實現的,而是交給Spring配置創建類對象
-
-
spring是一站式的框架
- Spring在javaee三層結構中,每一層都提供不同的解決技術
web層:SpringMVC
service層:Spring的ioc
dao層:Spring的jdbc Template
-
Spring 4.x
Spring 的ioc操作
- 把對象創建直接交給Spring來進行管理
- ioc操作兩部分:
- ioc的配置文件方式
- ioc的註解方式
IOC底層原理
-
ioc底層原理使用技術
- xml配置文件
- dom4j解析xml
- 工廠設計模式
- 反射
-
思想:高內聚,低耦合
Ioc原理:
IOC入門案例
第一步:導入jar包
1. 解壓資料文件
2. jar包特點:都有三個jar包
1. 基本jar包
2. 文檔
3. 源代碼
3. 做Spring最基本功能時候,導入四個核心的jar包就可以了
4. 導入支持日誌輸出的jar包
第二步:創建類,創建方法
第三步:創建spring配置文件,配置創建類
-
spring 核心配置文件名稱和位置不是固定的
-
建議放到src下面,官方建議applicationContext.xml
-
引入schema約束
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2020030719352249.png)
- 配置對象創建
第四步 寫代碼測試
Spring的bean管理(xml方式)
Bean實例化的方式
-
在spring裏面通過配置文件創建對象
-
bean實例化三種方式實現
-
使用類的無參數構造創建
<bean id="user" class="User"></bean>
類裏沒有無參數構造會出現異常
-
使用靜態工廠創建
- 創建靜態的方法,返回類對象
-
使用實例工廠創建
1.創建不是靜態的方法,返回類對象
-
Bean標籤常用屬性
-
id屬性:id屬性值名稱任意命名
id屬性值不能包含特殊符號
根據id值得到配置對象
-
class屬性:創建對象所在類的全路徑
-
name屬性:功能和id屬性是一樣的,id屬性值不能包含特殊符號,但是在name屬性值裏面可以包含特殊符號,遺留屬性,基本不用
-
scope屬性:
屬性注入
-
創建對象時,向類裏面屬性裏設置值
-
屬性注入的方式介紹(三種方式)
-
Spring框架中,支持前兩種方式
-
set方法注入
-
有參數構造注入
-
注入對象類型屬性
-
創建service類和dao類
1.在service中得到dao對象
-
具體實現過程
1.在service裏面把dao作爲類型屬性
2.生成dao類型屬性的set方法
3.配置文件注入關係
P名稱空間注入
注入複雜類型屬性
- 數組
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200307193943156.png)
-
list集合
-
map集合
-
properties類型
IOC和DI區別
1. ioc:控制反轉,把對象創建交給spring進行配置
2. DI:依賴注入,向類裏面的屬性中設置值
3. 關係:依賴注入不能單獨存在,需要在ioc基礎上完成操作
Spring整合web項目原理
-
加載spring核心配置文件
- new對象,功能可以實現,效率很低
-
實現思想:把加載配置文件和創建對象過程,在服務器啓動時候完成
-
實現原理
- ServletContext對象
- 監聽器
- 具體使用
在服務器啓動時候,爲每個項目創建一個ServletContext對象
在ServletContext對象創建時,使用監聽器可以具體到ServletContext對象什麼時候創建
使用監聽器聽到ServletContext對象創建時候
加載spring配置文件,把配置文件配置對象創建
把創建出來的對象放到ServletContext對象裏面(setAttribute方法)
獲取對象,到ServletContext域得到(getAttribute方法)