Java web高級編程——Spring Framework

1. Spring Framework的主要功能
(1)反轉控制和依賴注入;
(2)面向切面的編程;
(3)數據訪問和事務管理;
(4)應用程序消息(訂閱-發佈模式/觀察者模式);
(5)web應用程序MVC模式;

2. 使用Spring的原因
(1)邏輯代碼分組:避免了servlet中doGet/doPost中大量的分支和轉發邏輯,或者定義大量的servlet,將頁面訪問映射到方法級別;
(2)使用同一代碼庫的多個用戶界面:將通用的業務邏輯封裝成service;

3. 應用上下文(ApplicationContext接口)
在Spring中,Context負責管理Bean,執行業務邏輯的Java對象,執行任務、持久化和獲取持久化數據、響應HTTP請求等
Spring Bean可以,自動裝配/檢測,消息通知、定時執行、bean驗證和執行其他關鍵Spring服務。
Context是可以分層設計的,同一層的Context之間不可以共享資源,但可以同時共享父級Context中的資源。

類體系
接口
ConfigurableApplicationContext:可配置,基本的ApplicationContext只是可讀的;
WebApplicationContext和ConfigurableWebApplicationContext:提供對底層ServletContext和ServletConfig的訪問;
具體類
ClassPathApplicationContext;
FileSystemXmlApplicationContext;
XmlWebApplicationContext;
AnnotationConfigApplicationContext;

應用上下文是層次結構
通過ConetxtLoaderListener可以創建根上下文,會自動設置爲所有Dispatcher上下文的父級上下文;
一般我們可以將Controller放到具體的Dispatcher上下文中,而Service業務邏輯,數據倉庫等放在根應用上下文中,將控制器放在Servlet應用上下文中。

注意:要將不同上下文的自動檢測掃描Bean分開,否則會造成生成多個同樣的Bean的問題;

4. 啓動Spring Framework
XML部署描述符啓動
初始化器啓動
通過監聽器不能保證在所有監聽器之前調用contextInitialized方法;
Java EE6的ServletContainerInitializer可以在應用程序生命週期的最早的點調用onStartup方法;
但是必須要將定義的Initializer類放到JAR文件的/META-INF/services目錄中,spring通過橋接接口的方式,springSevletContainerIntializer類實現了ServletContainerInitializer接口,在onStartUp需找WebApplicationInitializer接口的實現,調用所有的onStartUp方法,因此我們只要實現後者就可以了;

注意:不要將DispatcherServlet映射到URL模式“/*”,而是“/”,防止將jsp映射到Servlet;

5. 配置Spring Framework
三種方式可以配置Spring:
XML方式
混合方式:註解(自動裝配+自動檢測)+XML;
@Configuration配置
優勢:XML難於調式,不能進行單元進行測試;
@Configuration用@Component元註解創建,因此自動檢測時要注意使用Filter來排除;
@Import和@ImportResource可以導入配置;
@EnableWebMvc:啓用web mvc;

spring的生命週期和回調接口:在Spring實戰中有介紹,使用Aware接口;

6. bean definition profile
profile文件一般可以進行一些基本配置的設置,一個常用的手段是在開發和生產環境使用不同的profile文件便於切換;
聲明
使用@Profile可以載入對應的profile文件,可以新建兩個配置類,分別用於開發和生產模式,使用不同的profile;
激活
<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>development</param-value>
</context-param>

@Profile也是一個元註解,推薦使用自定義註解的方式;

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