1. 程式人生 > >初步瞭解Spring

初步瞭解Spring

Spring是一個輕量級框架,用於組織中間層物件,如Hibernate和struts,實現中介軟體之間的高度解耦,是真正的面向介面程式設計,spring擁有20多個模組,包括核心容器,資料訪問整合,Wb(serlvet,web),AOP模組等,相當於一個完整平臺!如果把Tocamcat比做插座,那麼spring就是才能夠其中一個插位延伸出來的排插!

1----核心容器(Core Context):以Beans和Core為基礎實現了BeanFactory類,提供了IOC和依賴注入,而Context就在Bean和Core的基礎上整合,添加了國際化,資源載入,校驗(監聽)等功能

2----資料整合訪問模組(JDBC , ORM , Transaction):此部分提供的是一套連線資料庫的程式化的程式碼,減少了開發過程中連線失敗,或者釋放失敗引起的一系列問題!Transction為事務模組,提供了對特定事務的支援,但是必須要求使用者實現特定的 介面!

3----Web模組:提供了Servlet支援,web支援,和Struats支援。Web提供了面向web的整合功能,如檔案上傳,使用監聽器初始化IOC容器和Web上下文!而Servlet則是提供了模型-檢視-控制器的實現

4----AOP模組:面向切面程式設計的實現,提供了攔截器和類似日誌的切點,降低了耦合性並可以將某些橫向行為插入到業務中!

5---Test模組:提供了Junit的測試功能,提供了一致的applicationContext並快取上下文!

============================================================================

原版本Spring結構如下:

1---applicationContext.xml檔案:用於配置基本的引數資訊,載入Beans物件檔案(最初的Spring每個物件都會有一個hbm.xml檔案),攔截器,dataSource資料來源,sessionFactor工廠,Hibernate框架,事務管理等!

2---User.hbm.xml檔案:維護了這個物件裡面屬性的特點還有方法型別!

將java程式碼中物件間的依賴關係的控制權交給了Spring配置檔案,由Spring來生成物件,並且設定物件間的依賴關係,這就是控制反轉(IOC)或者叫依賴注入(DI),控制反轉是指原本是由哪個Servlet物件呼叫哪個物件,那麼就由該Servlet物件去負責建立被呼叫者的例項。現在建立物件的權利被Sprng的IOC容器接受了,所以稱控制物件唄反轉了!而依賴注入是指原本引用一個物件需要外掛例項後通過例項呼叫,現在由於物件的建立都交給了Spring的IOC容器,我們可以直接在Servlet程式碼中通過配置或者註解依賴的方式注入!

在結合SpringMvc後的結構分析:

spring相當是一個外接延伸的排插,根據web專案的特點,我們同樣需要在web.xml中維護其資訊

<!--通過載入 applicationContext.xml 對web和spring容器進行整合載入-->
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    classpath*:/applicationContext.xml,
    classpath*:/applicationContext-datasource.xml
  </param-value>
</context-param>

//提高整合的融合度

<!-- RequestContextListener實現ServletRequestListener監聽器介面接,Web伺服器接收的每次請求都會通知該監聽器,將Spring容器與Web容器結合的更加密切 -->
<!--對web和spring容器進行監聽的容器:繼承底層的事件監聽機制-->
<listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

到這一步,關於spring的資訊就基本載入到web專案中,那麼還需要兩個檔案用於配置spring框架所帶來的簡約化處理!

配置檔案:

在resources包的 applicationContext.xml下配置Spring的全域性掃描,以及AOP切面,以及外屬性檔案連線,定時排程等

<context:component-scan base-package="com.mmall" annotation-config="true">
    <!--排除對controller注入的掃描,交給sringmvc的dispatcherServlet-->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--<context:annotation-config/>-->
<!--AOP切面-->
<aop:aspectj-autoproxy/>

<context:property-placeholder location="classpath:datasource.properties"/><!--追加主動載入外帶屬性檔案&ndash;&gt;&ndash;&gt;-->
<!--定時排程-->
<task:annotation-driven/>
<!--容器檔案太大切分成幾部分-->
<import resource="applicationContext-datasource.xml"/>

其中datasource.properties是用於載入資料庫連線的配置資訊,而applicationContext-datasource.xml則是用於讀取datasource的配置檔案,裡面除了維護以xml讀取到的資料庫連線資訊外, 還建立了sessionFactory()用於連線資料庫!以及資料庫分頁!在連線成功後,同時也配置mapperScannerConfigurer用於掃描-載入mappers裡維護的xml檔案裡面的SQL!以及事務控制

以上為用於整合其他模式時候的spring,這個時候的spirng也是最簡潔明瞭,因為原本屬於sring的實現大部分都會被遷移,這也是目前大多數公司的用法