第十四部分. 常用框架之spring

⒈ Spring核心理念
Spring 是一個 IOC 和 AOP 容器框架。
⑴ 控制反轉(IOC)
傳統的 java 開發模式中,當需要一個對象時,我們會自己使用 new 或者 getInstance等直接或者間接調用構造方法創建一個對象。而在 spring 開發模式中,spring 容器使用了工廠模式爲我們創建了所需要的對象,不需要我們自己創建了,直接調用 spring 容器來實例化,這是控制反轉的思想。
總結spring使用步驟:
① 在applicationContext.xml文件中配置bean:


② 創建一個AppliCationContext對象:


ApplicationContext它是BeanFactory的一個子接口,我們在使用時使用的是AppliCationContext的實現類ClassPathXmlApplicationContext。可以通過getBean(配置文件中id名稱)來獲取指定的對象。
⑵ 依賴注入(DI)
在spring框架負責創建Bean對象時,動態將依賴對象注入到Bean組件。


簡單說,這時UserServiceImpl中的info屬性值就是ITCAST。
注意:IOC和DI區別?
    IOC 控制反轉,是指對象實例化權利由spring容器來管理,本質是通過xml配置文件+反射+factory來實現的;
    DI 依賴注入,在spring創建對象的過程中,對象所依賴的屬性通過配置注入對象中。

在spring中bean的屬性注入有兩種方式,如下 :
① 構造器注入;


② Setter方法注入。


關於ref屬性作用:


使用ref來引入另一個bean對象,完成bean之間注入。
⑶ 面向切面編程(AOP)
概念:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
實現原理:AOP 底層是動態代理,如果是接口採用 JDK 動態代理,如果是類採用 CGLIB 方式實現動態代理。AOP是一個概念,並沒有設定具體語言的實現,它能克服那些只有單繼承特性語言的缺點,spring2.0之後整合AspectJ第三方AOP技術。
AspectJ是一個面向切面的框架,它擴展了Java語言。AspectJ定義了AOP語法,所以它有一個專門的編譯器用來生成遵守Java字節編碼規範的Class文件。
主要功能:日誌記錄,性能統計,安全控制,事務處理,異常處理等等。
主要意圖:將日誌記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,通過對這些行爲的分離,我們希望可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行爲的時候不影響業務邏輯的代碼。


2. Spring 中的設計模式
⑴ 代理模式——spring 中兩種代理方式,若目標對象實現了若干接口,spring 使用 jdk 的 java.lang.reflect.Proxy類代理。若目標兌現沒有實現任何接口,spring 使用 CGLIB 庫生成目標類的子類。
⑵ 單例模式——在 spring 的配置文件中設置 bean 默認爲單例模式。
⑶ 模板方式模式——用來解決代碼重複的問題。 比如:RestTemplate、JmsTemplate、JpaTemplate。
⑷ 前端控制器模式——spring 提供了前端控制器 DispatherServlet 來對請求進行分發。
⑸ 視圖幫助(View Helper )——Spring提供了一系列的JSP標籤,高效宏來輔助將分散的代碼整合在視圖裏。
⑹ 依賴注入——貫穿於 BeanFactory/ApplacationContext 接口的核心理念。
⑺ 工廠模式——在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,並且是通過使用同一個接口來指向新創建的對象。Spring 中使用 beanFactory 來創建對象的實例。


3. Spring 的常用註解
Spring 在 2.5 版本以後開始支持註解的方式來配置依賴注入。可以用註解的方式來代替 xml 中 bean 的描述。註解注入將會被容器在 XML 注入之前被處理,所以後者會覆蓋掉前者對於同一個屬性的處理結果。
註解裝配在 spring 中默認是關閉的。所以需要在 spring 的核心配置文件中配置一下才能使用基於註解的裝配模 式。配置方式如下:
<context:annotation-config />
常用的註解:
@Repository 用於DAO層;
@Service 用於service層;
@Controller  用於表現層;
@Required  該註解應用於設值方法;
@Autowired  該註解應用於有值設值方法、非設值方法、構造方法和變量;
@Qualifier 該註解和@Autowired 搭配使用,用於消除特定 bean 自動裝配的歧義。


4. Spring bean 的生命週期
闡述Spring框架中Bean的生命週期 :


① Spring IoC容器找到關於Bean的定義並實例化該Bean。
② Spring IoC容器對Bean進行依賴注入。
③ 如果Bean實現了BeanNameAware接口,則將該Bean的id傳給setBeanName方法。
④ 如果Bean實現了BeanFactoryAware接口,則將BeanFactory對象傳給setBeanFactory方法。
⑤ 如果Bean實現了BeanPostProcessor接口,則調用其postProcessBeforeInitialization方法。
⑥ 如果Bean實現了InitializingBean接口,則調用其afterPropertySet方法。
⑦ 如果有和Bean關聯的BeanPostProcessors對象,則這些對象的postProcessAfterInitialization方法被調用。
⑧ 當銷燬Bean實例時,如果Bean實現了DisposableBean接口,則調用其destroy方法。


5. Spring Bean的實例化方式
⑴ 無參數構造
對於這種方式,注意Bean類中必須提供無參數構造。


⑶ 靜態工廠方法
需要創建一個工廠類,在工廠類中提供一個static返回bean對象的方法就可以。


⑶ 實例工廠方法
需要創建一個工廠類,在工廠類中提供一個非static的創建bean對象的方法,在配置文件中需要將工廠配置,還需要配置bean。


6. Spring的作用
⑴ Spring 能幫我們根據配置文件創建及組裝對象之間的依賴關係。
Spring 根據配置文件來進行創建及組裝對象間依賴關係,只需要改配置文件即可。
⑵ Spring 面向切面編程能幫助我們無耦合的實現日誌記錄,性能統計,安全控制。
Spring 面向切面編程(AOP)能提供一種更好的方式來完成,一般通過配置方式,而且不需要在現有代 碼中添加任何額外代碼,現有代碼專注業務邏輯。
⑶ Spring 能非常簡單的幫我們管理數據庫事務。
採用 Spring,我們只需獲取連接,執行 SQL,其他事物相關的都交給 Spring 來管理了。
⑷ Spring 還能與第三方數據庫訪問框架(如 Hibernate、JPA)無縫集成,而且自己也提供了一套 JDBC訪問模板,來方便數據庫訪問。
⑸ Spring 還能與第三方 Web(如 Struts、JSF)框架無縫集成,而且自己也提供了一套 Spring MVC框架,來方便 web 層搭建。
⑹ Spring 能方便的與 Java EE(如 Java Mail、任務調度)整合,與更多技術整合(比如緩存框架)。


7. Spring事務管理機制
⑴  Spring事務管理的四個優點:
① 提供一致的對於不同的事務管理的API;② 支持聲明式事務管理(重點);③ 編程事務管理(在開發中應用比較少);④ 優秀的整合與Spring的數據訪問。
⑵ Spring事務管理主要提供了三個接口來完成:
① org.springframework.transaction.PlatformTransactionManager
這是一個事務管理器,可以來選擇相關的平臺(jdbc  hibernate  jpa…)。
② TransactionDefinition
它定義事務的一些相關信息 例如 隔離 傳播 超時 只讀。
③ TransactionStatus
它主要描述事務具體的運行狀態。
⑶ 事務管理方式
方式一:編碼方案不建議使用,它具有侵入性。在原有的業務代碼基礎上去添加事務管理代碼。
方式二:聲明式事務控制,基於AOP對目標進行代理,添加around環繞通知。這種方案,它不具有侵入性,不需要修改原來的業務代碼。

以下兩種聲明式事物管理方式:
① 基於xml配置聲明式事務管理方案
第一步:在applicationContext.xml文件中添加aop與tx的名稱空間。


第二步:在applicationContext.xml文件中配置,Spring提供的advice是傳統的spring advice。
a. 聲明事務管理器:


b. 配置通知:Spring爲我們提供了一個TransactionInterceptor來完成增強


對於這個增強,我們可以使用spring爲我們提供的一個標籤<tx:advice>來完成操作     

    
c. 配置切面 :因爲使用的是傳統的spring的advice,需要使用<aop:advisor>


② 基於annotation聲明式事務管理方案
可以使用@Transaction來在類或方法上添加聲明式事務管理.
注意:需要在applicationContext.xml文件中使用


相當於開啓註解事務控制


問題:關於xml方式與annotation方式的優缺點?
    從簡單上來說,使用註解更方便。
    使用配置的方案,可以對事務配置進行集中維護。


8. ApplicationContext與BeanFactory關係


ApplicationContext它是擴展BeanFactory接口。
BeanFactory它採取延遲加載的方案,只有真正在getBean時纔會實例化Bean。

在開發中我們一般使用的是ApplicationContext,真正使用的是其實現類:
FileSystemXmlAppliCationContext 根據文件路徑獲取。
ClassPathXmlApplicationContext  根據類路徑獲取。
AppliCationContext它會在配置文件加載時,就會初始化Bean,並且ApplicationContext它提供不同的應用層的Context實現。例如在web開發中可以使用WebApplicationContext。



 

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