Spring Framework 官方文件學習(一)介紹

weixin_34015860發表於2016-09-22
 
Spring框架提供了大概20個模組,分類為:Core Container, Data Access/Integration, Web, AOP (Aspect Oriented Programming)Instrumentation, Messaging, and Test
 
1、Core Container包含:spring-core, spring-beans, spring-context, spring-context-support, and spring-expression 模組。
①spring-core, spring-beans是Spring框架的基礎,提供了IoC和DI功能。spring-beans中的BeanFactory是工廠模式的實現。
 
②spring-context模組基於spring-core、spring-beans,是一種框架式訪問物件的方法,類似JNDI註冊方式。
還新增了國際化支援、事件傳播支援、資源載入支援、上下文的建立支援等等。還有JavaEE的部分功能。
ApplicationContext介面是該模組的核心。
 
③spring-context-support模組則提供了整合通用第三方庫的支援,將其整合到Spring應用上下文中,如快取、郵件、計劃、模板引擎。
 
④spring-expression模組提供了可在執行時查詢和操作物件圖的表示式語言,很強大。是對JSP中unified EL的擴充套件。
支援:設定/獲取屬性值,屬性分配,方法呼叫,訪問陣列、集合及索引的內容,邏輯和數字運算子,命名變數,通過名字在Spring IoC容器中獲取物件。
 
2、AOP and Instrumentation包含:
spring-aop模組提供了AOP程式設計,允許定義方法攔截器和切入點,以與具體的功能程式碼解耦合。
spring-aspects模組整合了AspectJ。
spring-instrument模組,提供了類工具支援和類載入器實現,用於特定的應用伺服器。
spring-instrument-tomcat模組,包含了對tomcat的代理。
 
3、Messaging
Spring Framework 4 包含了spring-messaging模組,帶有Spring Integration專案的關鍵抽象,如Message、MessageChannel、MessageHandler以及其他,以作為基於訊息的應用的基礎。 
也提供了一些註解,可以將訊息傳送到方法中。
 
4、Data Access/Integration,包含JDBC、ORM、OXM、JMS和Transaction模組。
spring-jdbc模組,提供了JDBC抽象層,免除了繁雜的JDBC編碼和不同資料庫開發商錯誤程式碼的分析。
spring-tx模組,允許程式碼式和宣告書事務管理。(需要實現特定介面,支援所有POJO??)
spring-orm模組,提供了對常見ORM的整合層,常見ORM包括JPA、JDO和Hibernate。通過使用該模組,你既可以使用ORM的功能,也可以使用Spring提供的功能,例如簡單的宣告式事務管理。
spring-oxm模組,提供了抽象層,支援Object/XML對映實現 如JAXB、Castor、XMLBeans、JiBX和XStream。
spring-jms模組,包含了生產和消費訊息功能,整合了spring-messaging模組。
 
5、Web,包含spring-web, spring-webmvc, spring-websocket, and springwebmvc-portlet模組。
spring-web模組,提供了基本的web功能,如檔案上傳、使用Servlet Listeners初始化IoC容器、web容器。同樣包含了一個HTTP客戶端和Spring遠端支援的web部分。
spring-webmvc模組,包含了MVC和REST Web Service實現。
spring-webmvc-portlet模組,提供了用於Portlet環境的MVC實現,映象了spring-webmvc模組的功能。
 
6、Test
spring-test模組,支援Spring元件的單元測試和整合測試,使用JUnit或者TestUG。提供了Spring ApplicationContext的載入及快取。還提供了mock物件!
 
技巧
通過使用Spring BOM,在 dependencyManagement 匯入spring-framework-bom ,然後就可以保證所有的Spring依賴都是同一個版本 -- 可以不用再宣告版本了。
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.3.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
<dependencies>

 

 
Logging,這是Spring唯一強轉要求的外部依賴,JCL。
關掉JCL:從spring-core模組中排除依賴。或者,選一個依賴取代JCL。
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.3.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

至此,已經破壞了應用(不能執行了),所以還需要修復一下。使用JCL的其他實現例如SLF4J。

SLF4J,是編譯時繫結,而不是執行時判斷,所以更乾淨。(應該是指在編譯時就判斷是否需要相應的程式碼,不需要就去掉)
但是,有一些容器內建了JCL的實現,這時單純的排除依賴是不夠的。這時候最好的辦法是反轉類載入器層次,讓應用控制JCL依賴,而非容器控制。(如IBM的WebSphere Application Server。知道就行,略過。)
 
 
4.0 版本的改進(摘錄):
  1. 注入bean時,支援泛型限定。如 @Autowired Repository<Customer> customerRepository  。
  2. CGLIB-based proxy classes 不再需要一個預設構造器。
  3. 新的 @RestController 註解。
4.1 版本的改進(摘錄):
  1. 用Jackson支援JSONP
  2. 新的lifecycle,允許攔截 @ResponseBody@ResponseEntity 方法,在controller返回之後,但寫入響應之前。
  3. 新的HttpMessageConverter選項:通過 jackson-dataformat-xml擴充套件開啟基於Jackson的XML序列化支援。如果存在 jackson-dataformat-xml,將取代 JAXB2
4.2 版本的改進(摘錄):
  1. 可以使用Java 8的預設方法來編寫配置檔案,@Bean 預設方法。
  2. @Import 支援匯入常規類作為bean,而不僅僅是配置類了。
  3. 內建的CORs支援,包含全域性的(MVC Java config和 XML namespace)和區域性的(如@CrossOrigin)配置。
  4. 預設的JSON字首,由 "{} && " 改成更安全的 ")]}', " 
4.3 版本的改進(摘錄):
  1. Java 8 的預設方法可以用作bean屬性的GETTER/SETTER。
  2. 如果目標bean只定義了一個構造方法,就不再需要@Autowired 註解了。
  3. 內建了對 HTTP HEAD and HTTP OPTIONS 的支援。
  4. @RequestMapping 新的組合註解:@GetMapping@PostMapping@PutMapping@DeleteMapping, and @PatchMapping

  5.  

    新的組合註解:@RequestScope, @SessionScope, and @ApplicationScope

  6.  

    新的 @RestControllerAdvice 註解。

  7.  

    新的 @SessionAttribute 和 @RequestAttribute 註解。

  8.  @

    ModelAttribute allows preventing data binding via binding=false attribute (see reference).

  9.  @

    PathVariable may be declared as optional (for use on @ModelAttribute methods).

  10.  

    HTTP訊息轉換器中一致的charset處理,包括multipart文字內容預設的UTF-8編碼。

  11. 靜態資源處理使用配置好的ContentNegotiationManager ,來決定媒體型別。

 
 
 
 
 
 
 
 

相關文章