當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring选择哪种注入方式
生活随笔
收集整理的這篇文章主要介紹了
Spring选择哪种注入方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. Spring常見的注入方式
1.1 Field注入
field即在變量上直接使用注解進行注入,內部使用反射的方式實現注入到field中。
- 優點:代碼簡潔有效,最為開發人員喜歡使用
- 缺點:依賴對象可能為null而報空指針異常,容易出現循環依賴問題
1.2 setter注入
spring 3.x版本中推薦使用的注入方式,通過在set方法上使用注解完成對象注入。
- 優點:選擇性注入,可有可無,依賴不會影響整個項目運行
- 缺點:在對象實例化后,依賴信息依然可以通過set方法修改,不太好
1.3 構造器注入
spring 4.x版本時Spring團隊推薦使用的注入方式,將注解標注在構造函數上,對象以參數的形式傳遞,在構造函數中完成注入對象的初始化。
- 優點:變量定義使用強制性的顯式注入(final關鍵字保證不可變)、避免空指針和循環依賴,
- 缺點:在需要注入的依賴較多時,使用構造方法臃腫
2. Spring為什么推薦使用構造器注入
Field注入盡管代碼上簡潔有效,但是會帶來一些問題:
Setter方法注入是Spring 3.x版本推薦的注入方式,因為setter的方式能用讓類在之后重新配置或者重新注入,但是
- 寫起來比較麻煩,每個依賴都需要一個set方法
- 可以重新配置或注入雖然方便,但是有些依賴需要不可變,使用此種方式產生不確定性
構造器注入是Spring 4.x 版本推薦的注入方式,主要優點有:
3. @Autowired、@Resource和@Inject的區別
3.1 @Autowired
- @Autowired注解是Spring2.5之后帶入的注解,通過AutowiredAnnotationBeanPostProcessor類實現注入
- @Autowired可以標注在CONSTRUCTOR、METHOD、PARAMETER、FIELD、ANNOTATION_TYPE之上
- @Autowired默認根據bean類型進行自動裝配,byType
- @Autowired注入時如果發現同類型有多個bean,此時需要使用@Qualifier注解來指定bean的name,即byName
- @Autowired注解有屬性required,默認為true,設置為false則表示未找到對應bean時不拋出異常
3.2 @Resource
- @Resource時javax.annotation包下的注解
- @Resource可以標注在TYPE, FIELD, METHOD之上
- @Resource是根據屬性名稱進行自動裝配的,其擁有屬性name,可以根據屬性值指定裝配bean的name
3.3 @Inject
@Inject注解需要導入javax.inject.Inject包,能實現注入 @Inject可以標注在CONSTRUCTOR、METHOD、FIELD之上 @Inject注解是根據類型自動裝配的,如果需要指定名稱,則需要配合@Named注解
4. 總結
盡管Spring 4.x 推薦使用構造器注入,但是我們仍然可以使用其他方式,且可以使用混合方式注入
- 不可變的注入使用構造器
- 可變可選注入使用setter方法
- 對于多實現的依賴注入時,可以使用Filed注入或者setter方法來指定注入的實現
- 實際使用Field注入的仍然很多,大部分是一些遺留問題,后續新項目可以嘗試盡量避免Field注入
總結
以上是生活随笔為你收集整理的Spring选择哪种注入方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可口的JAVA-并发控制之CountDo
- 下一篇: Nginx 301跳转踩坑总结