Spring 基礎知識學習

Spring 總結

在Spring框架的發佈版本中,共包含了20個不一樣的模塊,能夠劃分爲6類不一樣的功能。java

Spring總體架構圖

爲了下降Java開發的複雜性,Spring採起了如下4種關鍵策略:spring

  • 基於POJO的輕量級和最小侵入性編程;
  • 經過依賴注入和麪向接口實現鬆耦合;
  • 基於切面和慣例進行聲明式編程;
  • 經過切面和模板減小樣板式代碼。

依賴注入 DI

建立應用對象之間協做關係的行爲一般稱爲裝配(wiring),這也是依賴注入(DI)的本質。編程

當描述bean如何進行裝配時,Spring具備很是大的靈活性,它提供了三種主要的裝配機制:安全

  • 在XML中進行顯式配置。
  • 在Java中進行顯式配置。
  • 隱式的bean發現機制和自動裝配。

自動化裝配bean

Spring從兩個角度來實現自動化裝配:架構

  • 組件掃描(component scanning):Spring會自動發現應用上下文中所建立的bean。
  • 自動裝配(autowiring):Spring自動知足bean之間的依賴。
    組件掃描和自動裝配組合在一塊兒就能發揮出強大的威力,它們可以將你的顯式配置下降到最少。

@Component註解代表該類會做爲組件類,並告知Spring要爲這個類建立bean
@ComponentScan註解啓用組件掃描
@Autowired註解實現自動裝配框架

經過Java代碼裝配bean

@Bean註解會告訴Spring這個方法將會返回一個對象,該對象要註冊爲Spring應用上下文中的bean。3d

經過XML裝配bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="knight" class="com.fiberhome.tongl.knight.BraveKnight">
        <constructor-arg ref="quest" />
    </bean>

    <bean id="quest" class="com.fiberhome.tongl.knight.SlayDragonQuest">
        <constructor-arg value="#{T(System).out}" />
    </bean>
</beans>

在XML中聲明DI時,會有多種可選的配置方案和風格。具體到構造器注入,有兩種基本的配置方案可供選擇:代理

  • 元素
  • 使用Spring 3.0所引入的c-命名空間

屬性注入,也有兩種基本的配置方案可供選擇:code

  • 元素
  • p-命名空間

三種Spring的配置使用總結

儘量地使用自動配置的機制。顯式配置越少越好,以免顯式配置所帶來的維護成本。當你必需要顯式配置bean的時候(好比,有些源碼不是由你來維護的,而當你須要爲這些代碼配置bean的時候),應該優先選擇基於Java的配置,它比基於XML的配置更增強大、類型安全而且易於重構。最後,只有當你想要使用便利的XML命名空間,而且在JavaConfig中沒有一樣的實現時,才應該使用XML。component

bean的做用域

Spring定義了多種做用域,能夠基於這些做用域建立bean,包括:

  • 單例(Singleton):在整個應用中,只建立bean的一個實例。
  • 原型(Prototype):每次注入或者經過Spring應用上下文獲取的時候,都會建立一個新的bean實例。
  • 會話(Session):在Web應用中,爲每一個會話建立一個bean實例。
  • 請求(Rquest):在Web應用中,爲每一個請求建立一個bean實例。

單例是默認的做用域,可是正如以前所述,對於易變的類型,這並不合適。若是選擇其餘的做用域,要使用@Scope註解,它能夠與@Component或@Bean一塊兒使用。

注入外部的值

在Spring中,處理外部值的最簡單方式就是聲明屬性源並經過Spring的Environment來檢索屬性。

@PropertySource引用類路徑中.properties的文件。
@Value 屬性佔位符(配置PropertySourcesPlaceholderConfigurer bean)

面向切面編程(aspect-oriented programming,AOP)

DI有助於應用對象之間的解耦,而AOP能夠實現橫切關注點與它們所影響的對象之間的解耦。

切點表達式

 

使用註解建立切面

@AspectJ註解解代表類不單單是一個POJO,仍是一個切面

@EnableAspectJAutoProxy註解啓用自動代理功能

AspectJ提供了五個註解來定義通知

  • @After 通知方法會在目標方法返回或拋出異常後調用
  • @AfterReturning 通知方法會在目標方法返回後調用
  • @AfterThrowing 通知方法會在目標方法拋出異常後調用
  • @Around 通知方法會將目標方法封裝起來
  • @Before 通知方法會在目標方法調用以前執行

Reference

  • 《Spring 實戰(第四版)》
相關文章
相關標籤/搜索