Spring入門學習

1. 概念

1.1 Spring是什麼?

(1)Spring是一個開源框架,爲了解決企業應用開發的複雜性而創建的,但現在已經不止應用於企業應用。

(2)是一個輕量級的控制反轉(IOC)和麪向切面(AOP)的容器框架。

--從大小與開銷兩方面而言spring都是輕量級的。

--通過控制反轉(IOC)的技術達到鬆耦合的目的。

--提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務進行內聚性的開發。

--包含並管理應用對象的配置和生命週期,這個意義上是一種容器。

--將簡單的組件配置、組合成爲複雜的應用,這個意義上是框架。

1.2 Spring作用是什麼?

(1)容器

(2)提供了對多種技術的支持

--JMS

--MQ支持

--UnitTest

--。。。。

(3)AOP(事務管理、日誌等)

(4)提供了衆多方便應用的輔助類(JDBC Template等)

(5)對主流應用框架(Hibernate等)提供了良好的支持。

1.3 適用範圍

(1)構建企業應用(Spring MVC + Spring + Hibernate/Mybatis)

(2)單獨適用Bean容器(Bean管理)

(3)單獨適用AOP進行切面處理

(4)其他的Spring功能,如:對消息的支持等。

(5)在互聯網中的應用。。。

1.4 什麼是框架

(1)框架的特點

--半成品

--封裝了特定的處理流程和控制邏輯

--成熟的、不斷升級改進的軟件

(2)框架與類庫的區別

--框架一般是封裝了邏輯、高內聚的,類庫則是鬆散的工具組合。

--框架專注於某一領域,類庫則是更通用的。

2. Spring IOC容器

2.1 什麼是IOC?

IOC:控制反轉,控制權的轉移,應用程序本身不負責依賴對象的創建和維護,而是由外部容器負責創建和維護。

DI(依賴注入)是某一種實現方式。

目的:創建對象並且組裝對象之間的關係。

2.2 單元測試

(1)下載junit-.*jar並引入工程

(2)創建UnitTestBase類,完成對Spring配置文件的加載、銷燬。

(3)所有的單元測試類都繼承自UnitTestBase,通過它的getBean方法獲取想要得到的對象

(4)子類(具體執行單元測試的類)加註解:@RunWith(BlockJUnit4ClassRunner.class)

(5)單元測試方法加註解:@Test

(6)右鍵選擇要執行的單元測試方法執行或者執行一個類的全部單元測試方法。

2.3 Bean容器的初始化

(1)基礎:兩個包

(2)初始化ApplicationContext方式:

--本地文件

--Classpath

--Web應用中依賴servlet或Listener

2.4 Spring注入

Spring注入是指在啓動Spring容器加載bean配置的時候,完成對變量的賦值行爲

常用的兩種注入方式:

(1)設值注入:通過調用屬性的set方法自動初始化對象

(2)構造注入

3 Spring Bean裝配(上)

3.1 Bean配置項

Bean的配置項主要有:id、Class、Scope、Constructor arguments、Properties、Autowiring mode、lazy-initialization mode、Initialization/destruction method

3.2 Bean的作用域

(1)singleton:單例,指一個Bean容器中只存在一份。

(2)prototype:每次請求(每次使用)創建新的實例,destory方式不生效。

(3)request:每次http請求創建一個實例且僅在當前request內有效。

(4)session:同上,每次http請求創建,當前session內有效。

(5)global session:基於portlet的web中有效(portlet定義了global session),如果是在web中,同session.

3.3 Bean的生命週期

定義、初始化、使用、銷燬。其中:

3.4 Bean的自動裝配

(1)No:不做任何操作。

(2)byname:根據屬性名自動裝配。此選項將檢查容器並根據名字查找與屬性完全一致的bean,並將其與屬性自動裝配。

(3)byType:如果容器中存在一個與指定屬性類型相同的bean,那麼將與該屬性自動裝配;如果存在多個該類型bean,那麼拋出異常,並指出不能使用byType方式進行自動裝配;如果沒有找到相匹配的bean,則什麼事都不發送

(4)Constructor:與byType方式類似,不同之處在於它應用於構造器參數。如果容器中沒有找到與構造參數類型一致的bean,那麼拋出異常。

4 Spring Bean裝配(下)

4.1 Classpath掃描與組件管理

(1)從Spring3.0開始,Spring JavaConfig項目提供了很多特性,包括使用java而不是XML定義bean,比如@Configuration,@Bean,@Import,@DependsOn

(2)@Component是一個通用註解,可用於任何bean

(3)@Repository,@Service,@Controller是更有針對性的註解。

--@Repository通常用於註解DAO類,即持久層。

--@Service通常用於註解Service類,即服務層。

--@Controller通常用於Controller類,即控制層(MVC)。

4.2 元註解(Meta-annotations)

5 Spring AOP基本概念

5.1 什麼是AOP?

AOP:Aspect Oriented Programming的縮寫,意爲:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。

主要的功能是:日誌記錄,性能統計,安全控制,事務處理,異常處理等等。

5.1.2 AOP實現方式

(1)預編譯

AspectJ

(2)運行期動態代理(JDK動態代理,CGLib動態代理)

SringAOP、JbossAOP

5.1.3 AOP幾個相關概念

名稱

說明

切面(Aspect)

一個關注點的模塊化,這個關注點可能橫切多個對象

連接點(Joinpoint)

程序執行過程中的某個特定的點

通知(Advice)

在切面的某個特定的連接點上執行的動作

切入點(Pointcut)

匹配連接點的斷言,在AOP中通知和一個切入點表達式關聯

引入(Introduction)

在不修改類代碼的前提下,爲類添加新的方法和屬性

目標對象(Target Object)

被一個或者多個切面所通知的對象

AOP代理(AOP Proxy)

AOP框架創建的對象,用來實現切面契約(aspect contract)(包括通知方法執行等功能)

織入(Weaving)

把切面連接到其他的應用程序類型或者對象上,並創建一個被通知的對象,分爲:編譯時織入,類加載時織入,執行時織入

5.1.4 Advice的類型

5.1.5 Spring框架中AOP的用途

(1)提供了聲明式的企業服務,特別是EJB的替代服務的聲明。

(2)允許用戶定製自己的方面,以完成OOP與AOP的互補使用。

5.1.6 Spring的AOP實現

(1)純java實現,無需特殊的編譯過程,不需要控制類加載器層次

(2)目前只支持方法執行連接點(通知Spring Bean的方法執行)。

(3)不是爲了提供最完整的AOP實現(儘管它非常強大);而是側重於提供一種AOP實現和Spring IOC容器之間的整合,用於幫助解決企業應用中的常見問題。

(4)Spring AOP不會與AspectJ競爭,從而提供綜合全面的AOP解決方案。

5.1.7 有接口和無接口的Spring AOP實現區別

(1)Spring Aop默認使用標準的JavaSE動態代理作爲AOP代理,這使得任何接口(或者接口集)都可以被代理。

(2)Spring AOP中也可以使用CGLIB代理(如果一個業務對象並沒有實現一個接口)。

-------------------------------------------------------------------------------------------------------待續!

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章