【spring】雜記

1.[spring aop]AOP核心概念


1、橫切關注點

對哪些方法進行攔截,攔截後怎麼處理,這些關注點稱之爲橫切關注點

2、切面(aspect)

類是對物體特徵的抽象,切面就是對橫切關注點的抽象

3、連接點(joinpoint)

被攔截到的點,因爲Spring只支持方法類型的連接點,所以在Spring中連接點指的就是被攔截到的方法,實際上連接點還可以是字段或者構造器

4、切入點(pointcut)

對連接點進行攔截的定義

5、通知(advice)

所謂通知指的就是指攔截到連接點之後要執行的代碼,通知分爲前置、後置、異常、最終、環繞通知五類

6、目標對象

代理的目標對象

7、織入(weave)

將切面應用到目標對象並導致代理對象創建的過程

8、引入(introduction)

在不修改代碼的前提下,引入可以在運行期爲類動態地添加一些方法或字段

2.[spring mvc]Spring AOP 支持編譯期織入、裝載期織入、運行時織入

AOP 實現的關鍵就在於 AOP 框架自動創建的 AOP 代理,AOP 代理則可分爲靜態代理和動態代理兩大類
靜態代理是指使用 AOP 框架提供的命令進行編譯,從而在編譯階段就可生成 AOP 代理類,因此也稱爲編譯時增強;
動態代理則運行時藉助於 JDK 動態代理、CGLIB 等在內存中“臨時”生成 AOP 動態代理類,因此也被稱爲運行時增強。

Spring對AOP的支持
1、如果目標對象實現了接口,默認會採用JDK的動態代理機制實現AOP
2、如果目標對象實現了接口,可以強制使用CGLIB實現AOP
3、如果目標對象沒有實現接口,必須使用CGLIB生成代理,spring會自動在CGLIB和JDK動態代理之間切換


3.spring的DispatcherServlet配置能有多個

<load-on-startup>1</load-on-startup> 要設置成不同的優先級。

以及
    <servlet-mapping>
        <servlet-name>weixin</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
應該不同。

4.自動裝配提供五種不同的模式供Spring容器用來自動裝配beans之間的依賴注入:
no:默認的方式是不進行自動裝配,通過手工設置ref 屬性來進行裝配bean。
byName:通過參數名自動裝配,Spring容器查找beans的屬性,這些beans在XML配置文件中被設置爲byName。之後容器試圖匹配、裝配和該bean的屬性具有相同名字的bean。
byType:通過參數的數據類型自動自動裝配,Spring容器查找beans的屬性,這些beans在XML配置文件中被設置爲byType。之後容器試圖匹配和裝配和該bean的屬性類型一樣的bean。如果有多個bean符合條件,則拋出錯誤。
constructor:這個同byType類似,不過是應用於構造函數的參數。如果在BeanFactory中不是恰好有一個bean與構造函數參數相同類型,則拋出一個嚴重的錯誤。
autodetect:如果有默認的構造方法,通過 construct的方式自動裝配,否則使用 byType的方式自動裝配。


5.【事務】Spring事務管理核心接口
這裏寫圖片描述


6.Spring bean 的默認作用範圍singleton


7.集合注入

<bean id="collectionBean" class="com.tarena.entity.CollectionBean">  
  <!-- list 注入 -->  
  <property name="cityList">  
    <list>  
        <value>北京</value>  
        <value>上海</value>  
        <value>北京</value>  
        <value>廣州</value>  
    </list>  
  </property>  
  <!-- set注入 -->  
  <property name="citySet">  
    <set>  
        <value>北京</value>  
        <value>上海</value>  
        <value>北京</value>  
        <value>廣州</value>  
    </set>  
  </property>  
  <!-- 數組 注入 -->  
  <property name="cityArray">  
    <list>  
        <value>北京</value>  
        <value>上海</value>  
        <value>廣州</value>  
        <value>北京</value>  
    </list>  
  </property>  
  <!-- Map注入 -->  
  <property name="mms">  
    <map>  
        <entry key="1" value="如花"/>  
        <entry key="2" value="如來"/>  
        <entry key="3" value="如草"/>  
    </map>  
  </property>  
  <!-- Properties key=value -->  
  <property name="props">  
    <props>  
        <prop key="driverClassName">  
           com.mysql.jdbc.Driver  
        </prop>  
        <prop key="url">  
            jdbc:mysql://127.0.0.1:3306/mydb  
        </prop>  
        <prop key="username">root</prop>  
        <prop key="password">1234</prop>  
    </props>  
  </property>  
</bean>

8.Spring 處理 XML 的編入編出(marshal/unmarshal)
Spring包裝了很多庫,包括 Jackson 和 JAXB


9.spring 緩存 @CachePut 和 @Cacheable
@CachePut:這個註釋可以確保方法被執行,同時方法的返回值也被記錄到緩存中。
@Cacheable:當重複使用相同參數調用方法的時候,方法本身不會被調用執行,即方法本身被略過了,取而代之的是方法的結果直接從緩存中找到並返回了。

@Cacheable的key生成方式 可以是方法參數及其成員變量的任意表達式


10.Spring 中 “@Transactional”註解是用 AOP 實現的


11.Spring框架支持如下五種不同的作用域:
singleton:在Spring IOC容器中僅存在一個Bean實例,Bean以單實例的方式存在。
request:每次HTTP請求都會創建一個新的Bean。該作用域僅適用於WebApplicationContext環境。
session:一個HTTP Session定義一個Bean。該作用域僅適用於WebApplicationContext環境.
globalSession:同一個全局HTTP Session定義一個Bean。該作用域同樣僅適用於WebApplicationContext環境.
bean默認的scope屬性是’singleton‘。


12.利用spring的mock類進行HTTP 請求單元測試:
spring框架提供了大量測試的mock類,包括與jndi,porlet,web應用相關的mock類。尤其是web應用相關的mock類,可以大大提高web組件測試的方便性。

打開spring的下載包的mock文件夾(路徑…mock\org\springframework\mock\web),就發覺有如下幾個文件:

MockHttpServletRequest:是HttpServletRequest接口的mock實現,用來模擬客戶端的HTTP請求,很常用的一個類。

MockHttpServletResponse:是HttpServletResponse接口的mock實現,用於模擬服務器對客戶端的響應。

MockHttpSession:是對HttpSession接口的mock實現。

DelegatingServletInputStream:是對ServletInputStream接口的mock實現。

DelegatingServletOutputStream:ServletOutputStream的mock實現。需要攔截和分析服務器的輸出的流的內容,可以使用該類。

其他的,例如MockFilterConfig,MockPageContext(可以測試預編譯的

JSP),MockRequestDispatcher,MockServletConfig看名稱就知道大概是mock什麼的。


13.@Required註解

@Required註解應用於bean屬性的setter方法,它表明影響的bean屬性在配置時必須放在XML配置文件中。
使用@Required但不關聯bean 來註解setter方法,將會發生BeanInitializationException 的異常


14.Spring框架中bean的生命週期
Spring容器讀取XML文件中bean的定義並實例化bean。
Spring根據bean的定義設置屬性值。
如果該Bean實現了BeanNameAware接口,Spring將bean的id傳遞給setBeanName()方法。
如果該Bean實現了BeanFactoryAware接口,Spring將beanfactory傳遞給setBeanFactory()方法。
如果任何bean BeanPostProcessors 和該bean相關,Spring調用postProcessBeforeInitialization()方法。
如果該Bean實現了InitializingBean接口,調用Bean中的afterPropertiesSet方法。
如果bean有初始化函數聲明,調用相應的初始化方法。 如果任何bean BeanPostProcessors 和該bean相關,調用postProcessAfterInitialization()方法。
如果該bean實現了DisposableBean,調用destroy()方法


15.Spring框架的基本模塊如下所示:

Core module     
Bean module 
Context module 
Expression Language module 
JDBC module 
ORM module 
OXM module 
Java Messaging Service(JMS) module 
Transaction module 
Web module 
Web-Servlet module 
Web-Struts module 
Web-Portlet module 

16.有兩個重要的bean生命週期方法。
第一個是setup方法,該方法在容器加載bean的時候被調用。
第二個是teardown方法,該方法在bean從容器中移除的時候調用。
bean標籤有兩個重要的屬性(init-method 和 destroy-method),你可以通過這兩個屬性定義自己的初始化方法和析構方法。
Spring也有相應的註解:@PostConstruct 和 @PreDestroy。


17.spring事務的隔離級別和傳播行爲

隔離級別
 - DEFAULT使用數據庫默認的隔離級別 
 - READ_UNCOMMITTED會出現髒讀,不可重複讀和幻影讀問題 
 - READ_COMMITTED會出現重複讀和幻影讀
 - REPEATABLE_READ會出現幻影讀 
 - SERIALIZABLE最安全,但是代價最大,性能影響極其嚴重 
傳播行爲: 
- REQUIRED存在事務就融入該事務,不存在就創建事務 
- SUPPORTS存在事務就融入事務,不存在則不創建事務 
- MANDATORY存在事務則融入該事務,不存在,拋異常 
- REQUIRES_NEW總是創建新事務 
- NOT_SUPPORTED存在事務則掛起,一直執行非事務操作 
- NEVER總是執行非事務,如果當前存在事務則拋異常 
- NESTED嵌入式事務 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章