Spring入門小知識
一 Spring概念
1 優點
1.1 一站式(full-stack)輕量級的開源框架
輕量級:可以更合理的分配資源,使用最合適最小的資源完成當前需求
一站式:可以對dao、service、web層都提供支援
1.2 兩大核心功能:
a. IOC (Inverse Of Control)
把建立物件的權利交給Spring,以被動接受的方式獲取物件的思想
步驟一:通過讀取配置檔案來反射建立物件
步驟二:將所有建立的物件存到Map中,方便使用時獲取
這個Map稱為容器,也可以用List來代替,但是Map更方便查詢
避免了 new ,實現了程式間解耦,提高執行效率,減小伺服器壓力
b. AOP (Aspect Oriented Programming)
1.3 能夠整合各種第三方框架
1.4 解耦,簡化開發,避免硬編碼,將物件間的依賴關係交由Spring進行控制。
什麼叫解耦?
編譯時不依賴,執行時依賴。
解決方法:
第一種: 利用反射
第二種: 提供配置檔案,用工廠來生產物件
1.5 AOP程式設計
1.6 宣告式事務
2 BeanFactory 和 ApplicationContext 的區別
2.1 BeanFactory 是 Spring 容器中的頂層介面且物件只在使用的時候才會建立
2.2 ApplicationContext
是BeanFactory的子介面只要一讀取配置檔案,預設建立物件。
其實現類:
a. ClassPathXmlApplicationContext
從類的根路徑下架在配置檔案(通常使用)
b. FileSystemXmlApplicationContext
從磁碟路徑上載入配置檔案,檔案可以在磁碟任意位置
c. AnnotationConfigApplicaionContext
使用註解配置容器物件時,用該類建立Spring容器。讀取註解
3 bean 標籤
3.1 作用
提供配置給spring建立物件,預設呼叫類中的無參構造。
3.2 屬性
id : 物件在容器中的唯一標識
class : 類的全限定類名,用來反射建立物件
scope : 物件的作用範圍
· singleton 預設值,單例
作用範圍:
一個應用只有一個物件的例項,作用範圍時整個引用
生命週期:
物件出生---應用載入,建立容器時
物件生存---容器在就一直存活
物件銷燬---應用解除安裝,銷燬容器時
· prototype 多例
作用範圍:
每次訪問物件時,都會重新建立物件例項
生命週期:
物件出生---使用物件時
物件生存---只要物件在使用就一直存活
物件銷燬---物件長時間不使用時,被GC回收
·factory-method 指定生產物件的方法
· request web專案,將spring建立的物件存入request中
`session web專案,將spring建立的物件存入session中
`·global session web專案,在Portlet環境中應用,如沒有,相當於session
·init-method 指定類中的初始化方法名稱
·destrory-method 指定累中銷燬方法名稱
3.3 bean 例項化的三種方式
1) 預設使用無參構造
2)spring管理靜態工廠
3)spring管理例項工廠
4 依賴注入(DI Dependency Injection)
4.1 概念
A is B : A 實現了 B 或者 A 繼承了 B ,即 A 就是 B
A has B : A 的物件中有一個私有屬性B , 就是A 依賴 B
依賴注入就是給物件中的屬性賦值。常用的方式由set注入和構造方法注入。
4.2 set方法注入
如果是自己寫的類,或者簡單屬性可以直接賦值,但是如果屬性是框架中的,
就無法直接賦值,只能通過自己或者spring呼叫set方法來賦值。
spring 中使用<bean>下的<property name="" value=""> 來為屬性賦值
4.3 構造方法注入
spring 中使用<bean>下的<constructor-arg name="" value=""> 來為屬性賦值,
類中需要提供一個對相應引數的建構函式
4.4 P名稱名稱空間注入
本質呼叫set方法,基本不用
4.5 注入集合屬性
String[] arg :
<property name="...">
<array>
<value>...</value>
</array>
</property>
Set<?>
<property name="...">
<set>
<value>...</value>
</set>
</property>
List<?>
<property name="...">
<list>
<value>...</value>
</list>
</property>
Map<?,?>
<property name="...">
<map>
<entry key="..." value="..."></entry >
<entry key="..." >...</entry >
</map>
</property>
Properties
<property name="...">
<props>
<prop key="...">...</prop>
</props>
</property>