spring第一天 spring概念和IOC入門

第一天 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方法)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章