文章目錄
第一天 spring概念和IOC入門
1.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
2. Spring的ioc操作
1.把對象的創建工作交給spring進行管理
2.ioc操作兩部分
(1)ioc的配置文件方式
(2)ioc的註解方式
3.IOC的底層原理
XML配置文件 、dom4j解析XML、 工廠設計模式 、反射技術
原理:爲了減少修改類定義之後修改調用代碼過多,嘗試不適用new對象。而是通過修改配置文件,使用dom4j解析XML配置文件根據id獲取class路徑,再使用反射創建類的對象。
4. IOC入門案例
1.導包
2.創建類
3.創建配置文件,建議是applicationContext.xml
引入schema約束(例如beans的約束:)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
</beans>
如果在XML catalog中配置了相關的約束,就可以在配置時出現提示。
3. spring的bean管理
3.1 實例化的方式
- 使用類的無參數的構造函數(常用):如果只有有參的構造函數那麼會報錯。
- 使用靜態工廠:創建工廠類的靜態方法,用於返回需要類的對象(直接使用工廠類調用靜態方法)
- 使用實例工廠:創建工廠類的非靜態方法,用於返回需要類的對象(需要先創建工廠對象,再調用方法)
3.2 Bean標籤的常用屬性
- id:名稱,任意取,不能包含特殊符號,用於從Bean中獲取對象
- name:功能和id一樣,但是可以包含特殊符號(遺留符號,一般不用)
- class:創建對象所在類的全路徑
- scope:範圍
– singleton:默認值,單例(一個對象)
– prototype:多例(多個對象)
– request:創建對象把對象放到request域裏面
– session:創建對象把對象放到session域裏面
– globalSession:創建對象把對象放到globalSession裏面
3.3 屬性注入介紹
1 創建對象的時候,向類裏面屬性裏面設置值
2 屬性注入的方式介紹
(1)使用set方法注入(最常用)
<property><property/>
(2)使用有參數構造函數注入
<constructor-arg><constructor-arg />
(3)使用接口注入(spring不支持)
3.4 注入對象類型的屬性(重點)
爲了類中使用其他對象,可以直接注入對象,使用ref=" "
而不是是value=" "
3.5 注入複雜類型屬性
- 數組
- list集合
- map集合
- 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>
4. IOC和DI區別
(1)IOC: 控制反轉,把對象創建交給spring進行配置
(2)DI: 依賴注入,向類裏面的屬性中設置值
(3)關係:依賴注入不能單獨存在,需要在ioc基礎之上完成操作
5.Spring整合web項目原理
1 加載spring核心配置文件,
上述代碼使用new 對象,功能可以實現,效率很低
2 實現思想:把加載配置文件和創建對象過程,在服務器啓動時候完成
3 實現原理
(1)ServletContext對象
(2)監聽器
(3)具體使用:
- 在服務器啓動時候,爲每個項目創建一個ServletContext對象
- 在ServletContext對象創建時候,使用監聽器可以具體到ServletContext對象在什麼時候創建
- 使用監聽器監聽到ServletContext對象創建時候,
– 加載spring配置文件,把配置文件配置對象創建
– 把創建出來的對象放到ServletContext域對象裏面(setAttribute方法) - 獲取對象時候,到ServletContext域得到 (getAttribute方法)