Spring

1,什麼是spring框架

spring是J2EE應用程序框架,是輕量級的IoC和AOP的容器框架,主要是針對javaBean的生命週期進行管理的輕量級容器,可以單獨使用,也可以和Struts框架,ibatis框架等組合使用。

2,架構概述

 

  1)IoC(Inversionof Control)控制反轉,對象創建責任的反轉,在spring中BeanFacotory是IoC容器的核心接口,負責實例化,定位,配置應用程序中的對象及建立這些對象間的依賴。XmlBeanFacotory實現BeanFactory接口,通過獲取xml配置文件數據,組成應用對象及對象間的依賴關係。

spring中有三種注入方式,一種是set注入,一種是接口注入,另一種是構造方法注入。

 

    2)AOP面向切面編程

   aop就是縱向的編程,如下圖所示,業務1和業務2都需要一個共同的操作,與其往每個業務中都添加同樣的代碼,不如寫一遍代碼,讓兩個業務共同使用這段代碼。

 spring中面向切面變成的實現有兩種方式,一種是動態代理,一種是CGLIB,動態代理必須要提供接口,而CGLIB實現是有繼承。

3,爲什麼使用spring框架

  在不使用spring框架之前,我們的service層中要使用dao層的對象,不得不在service層中new一個對象。如下:

存在的問題:層與層之間的依賴。

使用框架後:

 

service層要用dao層對象需要配置到xml配置文件中,至於對象是怎麼創建的,關係是怎麼組合的都交給了spring框架去實現。

4,框架優點

輕量級的容器框架沒有侵入性

使用IoC容器更加容易組合對象直接間關係,面向接口編程,降低耦合

Aop可以更加容易的進行功能擴展,遵循ocp開發原則

創建對象默認是單例的,不需要再使用單例模式進行處理

5,缺點:業務功能依賴spring特有的功能,依賴與spring環境。

  spring框架爲我們提供了三種注入方式,分別是set注入,構造方法注入,接口注入。接口注入不作要求,下面介紹前兩種方式。

 

A:set注入

  採用屬性的set方法進行初始化,就成爲set注入。

    1)給普通字符類型賦值。

   我們只需要提供屬性的set方法,然後去屬性文件中去配置好讓框架能夠找到applicationContext.xml文件的beans標籤。標籤beans中添加bean標籤, 指定id,class值,id值不做要求,class值爲對象所在的完整路徑。bean標籤再添加property標籤,要求,name值與User類中對應的屬性名稱一致。value值就是我們要給User類中的username屬性賦的值。

  2)給對象賦值

 同樣提供對象的set方法

 

   配置文件中要增加UserService的bean標籤聲明及User對象對UserService引用。

  這樣配置,框架就會將UserService對象注入到User類中。

 

  3)給list集合賦值

 同樣提供set方法

 

  4)給屬性文件中的字段賦值

<prop>標籤中的key值是.properties屬性文件中的名稱

 

注意:

  無論給什麼賦值,配置文件中<property>標籤的name屬性值一定是和對象中名稱一致。

B:構造方法注入

   1)構造方法一個參數

 

 

   2)構造函數有兩個參數時

  當參數爲非字符串類型時,在配置文件中需要制定類型,如果不指定類型一律按照字符串類型賦值。

  當參數類型不一致時,框架是按照字符串的類型進行查找的,因此需要在配置文件中制定是參數的位置

 

 

 

  這樣制定,就是構造函數中,第一個參數爲string類型,第二個參數爲int類型

註解Annotation,是一種類似註釋的機制,在代碼中添加註解可以在之後某時間使用這些信息。跟註釋不同的是,註釋是給我們看的,java虛擬機不會編譯,註解也是不編譯的,但是我們可以通過反射機制去讀取註解中的信息。註解使用關鍵字@interface,繼承java.lang.annotition.Annotition

  

  spring框架爲我們提供了註解功能。

  使用註解編程,主要是爲了替代xml文件,使開發更加快速。但是,xml文件的使用就是解決修改程序修改源代碼,現在又不去使用xml文件,那麼不就違背了開閉原則了麼,得確是。不過麼,註解也有註解的好,使用註解就不用配置那麼多的xml文件啦,最重要的是開發效率高。。

  在沒有使用註解時,spring框架的配置文件applicationContext.xml文件中需要配置很多的<bean>標籤,用來聲明類對象。使用註解,則不必在配置文件中添加標籤拉,對應的是在對應類的“註釋”位置添加說明。具體介紹如下:

   spring框架使用的是分層的註解。

    持久層:@Repository;

    服務層:@Service

    控制層:@Controller

 

1,使用註解,需要在配置文件中增加命名空間和約束文件

 

2,告訴框架那些類是使用註解的。

<context:component-scan base-package="com.lsz.spring"/>

3,持久層註解

@Repository 等同於配置文件中的

4,服務層註解

@Resource 對象間關係的組合,默認採用的是byName方式進行裝配,如果根據名稱查找不到關聯的對象,那麼會再採用byType繼續查找。

@Service註解等同與

5,控制層註解

 @Controller註解等同於

 這三個層中的註解關鍵字都可以使用@Component來代替。

 使用註解聲明對象,默認情況下生成的id名稱爲類名稱的首字母小寫。

 

6,從Spring環境中獲取Action對象。

 AOP(Aspect-OrientedProgramming)面向方面編程,與OOP完全不同,使用AOP編程系統被分爲方面或關注點,而不是OOP中的對象。

 

 AOP的引入

 在OOP面向對象的使用中,無可避免的會出現代碼重複,而且使用面向對象的編程方式,這種重複無法避免,比如用戶權限判斷中,根據相應的權限執行相應的方法;在servlet中設置編碼格式時,同樣相同的代碼出現很多次,而且還根業務無關,很容易忘記寫,結果運行的時候就出現亂碼拉。這種重複代碼不僅使編碼麻煩,而且還不容易維護。而AOP則將這些代碼整理起來,將解決某個切面問題的代碼單獨的放在某個模塊中,然後再織入到程序中。

AOP中的術語

 

 

 Aspect:橫切面的功能, 抽象出類,或接口, AOP編程重要的就是識別出橫切面功能。

       (方面,類似於字符編碼功能) 

 Advice: 橫切面功能的具體實現,需要根據實際的情況分析,如果在目標對象操作之前是 before在操作之後,就是 after advice。

       (增強,類似於字符編碼過濾器

 Pointcut:切入點,描述橫切面功能應用的限制,不是所有的流程都需要,那些可以使用的地方就是切入點

       (類似於過濾器的匹配規則 /*

 Joinpoint: 連接點,或指組件加入流程的時機,比如設置屬性,調用方法,等,Spring只支持方法調用的連接點,而其他的一些框架支持屬性的連接點如:AspectJ,

       (類似於過濾器的過濾規則 REQUEST,FORWARD

 Weave: 縫合,將組件應用到業務流程中的這個過程,叫縫合或織入。

       (類似於將過濾器配置到web.xml文件的過程

 Proxy,代理,在實現上,Spring的AOP其實就是使用JDK的動態代理(使用接口的方式完成代理操作),也可以使用CGLIB(使用繼承的方式完成代理操作)。

 Target,目標,業務操作的實際對象

 

 

實例:設置字符編碼格式看作是一個Aspect方面,而攔截器就是一個Advice增強。

 

 

過濾器類

 這樣就不用在每個servlet中設置編碼拉。。

 

spring框架中AOP的使用

1,拷貝jar包

 

2,spring配置文件中增加命名空間和約束文件

啓用aop功能:就把標籤添加進來就可以拉。

 

3,寫被代理的類和擴展類

4,由配置文件聲明

 

5,測試

 成功的話,執行目標類中的目標方法targetmethod()時,會先執行擴展類中的beforemethod()方法,再執行目標方法,最後再執行aftermethod()方法。

 也就是我們只需要手動調用targetmethod方法,擴展類中的兩個方法框架會在執行的時候通過讀取配置文件,獲取相應信息,自動給我們添加上擴展的方法。。

 測試肯定成功,不相信的話,可以自己試試。

 

 

 

 

Spring框架中使用AOP的優點

   Aop與spring的IOC容器整合,增強,切入點都是javabean,可以在同一文件中配置

 和spring的其他部分一樣,可以在不同應用服務器之間任意移植

   spring實現Aop的攔截接口,使得用戶不必綁定在特定的攔截器接口上

 aop面向切面的編程思想,打破面向對象的思維方式,我們要學習的不僅是aop的使用,更要學習面向切面的這種思想。

 

 

 

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