1. 程式人生 > >Spring 學習01

Spring 學習01

person list 具體實現 com 分析 global 依賴註入 技術 數組

一、Spring概念

1 spring是開源的輕量級框架

2 spring核心主要兩部分:

(1)aop:面向切面編程,擴展功能不是修改源代碼實現

(2)ioc:控制反轉,

- 比如有一個類,在類裏面有方法(不是靜態的方法),調用類裏面的方法,創建類的對象,使用對象調用方法,創建類對象的過程,需要new出來對象

- 把對象的創建不是通過new方式實現,而是交給spring配置創建類對象

3 spring是一站式框架

(1)spring在javaee三層結構中,每一層都提供不同的解決技術

- web層:springMVC

- service層:spring的ioc

- dao層:spring的jdbcTemplate

4 spring版本

(1)hibernate5.x

(2)spring4.x

二、Spring的ioc操作

1 把對象的創建交給spring進行管理

2 ioc操作兩部分:

(1)ioc的配置文件方式

(2)ioc的註解方式

三、IOC底層原理

1 ioc底層原理使用技術

(1)xml配置文件

(2)dom4j解決xml

(3)工廠設計模式

(4)反射

2 畫圖分析ioc實現原理

技術分享圖片

四、IOC入門案例

第一步 導入jar包

(1)解壓資料zip文件

Jar特點:都有三個jar包

技術分享圖片

技術分享圖片

(2)做spring最基本功能時候,導入四個核心的jar包就可以了

(3)導入支持日誌輸出的jar包

技術分享圖片

第二步 創建類,在類裏面創建方法

技術分享圖片

第三步 創建spring配置文件,配置創建類

(1)spring核心配置文件名稱和位置不是固定的

- 建議放到src下面,官方建議applicationContext.xml

(2)引入schema約束

技術分享圖片

技術分享圖片

(3)配置對象創建

技術分享圖片

第四步 寫代碼測試對象創建

(1)這段代碼在測試中使用

技術分享圖片

五、配置文件沒有提示問題

1 spring引入schema約束,把約束文件引入到eclipse中

(1)復制約束路徑

技術分享圖片

技術分享圖片

六、Spring的bean管理(xml方式)

1.Bean實例化的方式

1 在spring裏面通過配置文件創建對象

2 bean實例化三種方式實現

第一種 使用類的無參數構造創建(重點)

技術分享圖片

類裏面沒有無參數的構造,出現異常

技術分享圖片

第二種 使用靜態工廠創建

(1)創建靜態的方法,返回類對象

技術分享圖片

技術分享圖片

第三種 使用實例工廠創建

(1)創建不是靜態的方法,返回類對象

技術分享圖片

技術分享圖片

2.Bean標簽常用屬性

(1)id屬性:起名稱,id屬性值名稱任意命名

- id屬性值,不能包含特殊符號

- 根據id值得到配置對象

(2)class屬性:創建對象所在類的全路徑

(3)name屬性:功能和id屬性一樣的,id屬性值不能包含特殊符號,但是在name屬性值裏面可以包含特殊符號

(4)scope屬性

- singleton:默認值,單例

技術分享圖片

技術分享圖片

prototype:多例

技術分享圖片

- request:創建對象把對象放到request域裏面

- session:創建對象把對象放到session域裏面

- globalSession:創建對象把對象放到globalSession裏面

七、屬性註入介紹

1 創建對象時候,向類裏面屬性裏面設置值

2 屬性註入的方式介紹(三種方式)

(1)使用set方法註入

(2)使用有參數構造註入

(3)使用接口註入

技術分享圖片

3 在spring框架裏面,支持前兩種方式

(1)set方法註入(重點)

(2)有參數構造註入

使用有參數構造註入屬性

技術分享圖片

技術分享圖片

使用set方法註入屬性(重點)

技術分享圖片

技術分享圖片

八、註入對象類型屬性(重點)

1 創建service類和dao類

(1)在service得到dao對象

2 具體實現過程

(1)在service裏面把dao作為類型屬性

(2)生成dao類型屬性的set方法

技術分享圖片

(3)配置文件中註入關系

技術分享圖片

九、P名稱空間註入(了解)

技術分享圖片

技術分享圖片

十、註入復雜類型屬性【掌握】

1 數組

2 list集合

3 map集合

4 properties類型

<!-- 註入復雜類型屬性值 -->
    <bean id="person" class="cn.itcast.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>
            </props>
        </property>
    </bean>

十一、IOC和DI區別

(1)IOC: 控制反轉,把對象創建交給spring進行配置

(2)DI: 依賴註入,向類裏面的屬性中設置值

(3)關系:依賴註入不能單獨存在,需要在ioc基礎之上完成操作

十二、Spring整合web項目原理

1 加載spring核心配置文件,

技術分享圖片

(1)new對象,功能可以實現,效率很低

2 實現思想:把加載配置文件和創建對象過程,在服務器啟動時候完成

3 實現原理

(1)ServletContext對象

(2)監聽器

(3)具體使用:

- 在服務器啟動時候,為每個項目創建一個ServletContext對象

- 在ServletContext對象創建時候,使用監聽器可以具體到ServletContext對象在什麽時候創建

- 使用監聽器監聽到ServletContext對象創建時候,

-- 加載spring配置文件,把配置文件配置對象創建

-- 把創建出來的對象放到ServletContext域對象裏面(setAttribute方法)

- 獲取對象時候,到ServletContext域得到 (getAttribute方法)

參考資料:

《黑馬程序員》

Spring 學習01