讀Spring實戰學習總結

1.@Autowired註解可以用在類的任何方法上,@Inject與其類似.@Inject註解來源於Java依賴注入規範,該規範同時還爲我們定義了@Named註解。在自動裝配中,Spring同時支 持@Inject和@Autowired。儘管@Inject和@Autowired之間有着一些細微的差別,但是在大多數場景下,它們都是可以互相替換的。

2.裝配機制

在XML中進行顯式配置,<bean>標籤,構造器注入初始化bean,<property>;

在Java中進行顯式配置,@Bean;

隱式的bean發現機制和自動裝配,@ComponentScan,@Component,@Autowired。

混合裝配.

3.@Conditional註解作用

假設你希望一個或多個bean只有在應用的類路徑下包含特定的庫時才創建。或者我們希望某個bean只有當另外某個特定的bean也聲明瞭之後纔會創建。我們還可能要求只有某個特定的環境變量設置之後,纔會創建某個bean。在Spring 4之前,很難實現這種級別的條件化配置,但是Spring 4引入了一個新的@Conditional註解,它可以用到帶有@Bean註解的方法上。如果給定的條件計算結果爲true,就會創建這個bean,否則的話,這個bean會被忽略。

4.處理自動裝配的歧義性-注入時,有多個同一類型bean,會NoUniqueBeanDefinitionException

@Primary,@Qualifier

5.bean的作用域

單例(Singleton):在整個應用中,只創建bean的一個實例。

原型(Prototype):每次注入或者通過Spring應用上下文獲取的時候,都會創建一個新的bean實例。

會話(Session):在Web應用中,爲每個會話創建一個bean實例。

請求(Rquest):在Web應用中,爲每個請求創建一個bean實例。

作用域代理能夠延遲注入請求和會話作用域的bean: 一個會話過來,Spring並不會將實際的ean注入到某個Service中,Spring會注入一個到bean的代理。這個代理會暴露與bean相同的方法,所以Service會認爲它就是一個購物車。但是,當Service調用bean的方法時,代理會對其進行懶解析並將調用委託給會話作用域內真正的bean。如果代理是接口而不是類的話,這是可以的(也是最爲理想的代理模式)。但如果代理是一個具體的類的話,Spring就沒有辦法創建基於接口的代理了。此時,它必須使用CGLib來生成基於類的代理。所以,如果bean類型是具體類的話,我們必須要 將proxyMode屬性設置ScopedProxyMode.TARGET_CLASS,以此來表明要以生成目標類擴展的方式創建代理。

 

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