javascript
Spring精华问答 | Spring Bean的自动装配是怎么回事?
戳藍字“CSDN云計算”關注我們哦!
Spring框架是由于軟件開發的復雜性而創建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務器端的開發。從簡單性、可測試性和松耦合性角度而言,絕大部分Java應用都可以從Spring中受益。今天,就讓我們來看看關于Spring更加有深度的問題吧。
1
? Q:如何向Spring Bean中注入一個Java.util.Properties?
A:第一種方法是使用如下面代碼所示的<props>?標簽:也可用”util:”命名空間來從properties文件中創建出一個propertiesbean,然后利用setter方法注入bean的引用。
Q:Spring Bean的自動裝配是怎么回事?
A:在Spring框架中,在配置文件中設定bean的依賴關系是一個很好的機制,Spring容器還可以自動裝配合作關系bean之間的關聯關系。這意味著Spring可以通過向Bean Factory中注入的方式自動搞定bean之間的依賴關系。自動裝配可以設置在每個bean上,也可以設定在特定的bean上。
下面的XML配置文件表明了如何根據名稱將一個bean設置為自動裝配:
1 | <bean id="employeeDAO" class="com.howtodoinjava.EmployeeDAOImpl" autowire="byName" /> |
除了bean配置文件中提供的自動裝配模式,還可以使用@Autowired注解來自動裝配指定的bean。在使用@Autowired注解之前需要在按照如下的配置方式在Spring配置文件進行配置才可以使用。
1 | <context:annotation-config /> |
也可以通過在配置文件中配置AutowiredAnnotationBeanPostProcessor?達到相同的效果。
1 | <bean class ="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> |
配置好以后就可以使用@Autowired來標注了。
1 2 3 4 | @Autowired public EmployeeDAOImpl ( EmployeeManager manager ) { ????this.manager = manager; } |
? ? ? ?Q:自動裝配模式有什么區別?
? ? ? ?A:在Spring框架中共有5種自動裝配,讓我們逐一分析。
no:這是Spring框架的默認設置,在該設置下自動裝配是關閉的,開發者需要自行在bean定義中用標簽明確的設置依賴關系。
byName:該選項可以根據bean名稱設置依賴關系。當向一個bean中自動裝配一個屬性時,容器將根據bean的名稱自動在在配置文件中查詢一個匹配的bean。如果找到的話,就裝配這個屬性,如果沒找到的話就報錯。
byType:該選項可以根據bean類型設置依賴關系。當向一個bean中自動裝配一個屬性時,容器將根據bean的類型自動在在配置文件中查詢一個匹配的bean。如果找到的話,就裝配這個屬性,如果沒找到的話就報錯。
constructor:造器的自動裝配和byType模式類似,但是僅僅適用于與有構造器相同參數的bean,如果在容器中沒有找到與構造器參數類型一致的bean,那么將會拋出異常。
autodetect:該模式自動探測使用構造器自動裝配或者byType自動裝配。首先,首先會嘗試找合適的帶參數的構造器,如果找到的話就是用構造器自動裝配,如果在bean內部沒有找到相應的構造器或者是無參構造器,容器就會自動選擇byTpe的自動裝配方式。
Q:如何開啟基于注解的自動裝配?
A:要使用?@Autowired,需要注冊?AutowiredAnnotationBeanPostProcessor,可以有以下兩種方式來實現:
1、引入配置文件中的<bean>下引入?<context:annotation-config>
1 2 3 | <beans> ????<context:annotation-config /> </beans> |
2、在bean配置文件中直接引入AutowiredAnnotationBeanPostProcessor
1 2 3 | <beans> ????<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> </beans> |
??Q:請舉例解釋@Autowired注解?
A:@Autowired注解對自動裝配何時何處被實現提供了更多細粒度的控制。@Autowired注解可以像@Required注解、構造器一樣被用于在bean的設值方法上自動裝配bean的屬性,一個參數或者帶有任意名稱或帶有多個參數的方法。
比如,可以在設值方法上使用@Autowired注解來替代配置文件中的?<property>元素。當Spring容器在setter方法上找到@Autowired注解時,會嘗試用byType?自動裝配。
當然我們也可以在構造方法上使用@Autowired?注解。帶有@Autowired?注解的構造方法意味著在創建一個bean時將會被自動裝配,即便在配置文件中使用<constructor-arg>?元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class TextEditor { ???private SpellChecker spellChecker; ? ???@Autowired ???public TextEditor(SpellChecker spellChecker){ ??????System.out.println("Inside TextEditor constructor." ); ??????this.spellChecker = spellChecker; ???} ? ???public void spellCheck(){ ??????spellChecker.checkSpelling(); ???} } |
下面是沒有構造參數的配置方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <beans> ? ???<context:annotation-config/> ? ???<!-- Definition for textEditor bean without constructor-arg? --> ???<bean id="textEditor" class="com.howtodoinjava.TextEditor"> ???</bean> ? ???<!-- Definition for spellChecker bean --> ???<bean id="spellChecker" class="com.howtodoinjava.SpellChecker"> ???</bean> ? </beans> |
小伙伴們沖鴨,后臺留言區等著你!
關于Spring,今天你學到了什么?還有哪些不懂的?除此還對哪些話題感興趣?快來留言區打卡啦!留言方式:打開第XX天,答:……
同時歡迎大家搜集更多問題,投稿給我們!風里雨里留言區里等你~
福利
掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
圖解分布式架構的發展和演進 | 技術干貨
Docker 系列學習文章 | 什么是容器云?
任正非:華為海思芯片不是“備胎”!
揭秘清華 AI 學堂班:姚期智擔任首席教授,2019 年首批招收 30 人
Google Android 向華為“閉源”!華為手機迎來至暗時刻!
"兩年前我對區塊鏈的了解為零, 兩年后我成了工程師" 我是如何得到第一份工作的?
《使女的故事》大火,AI是背后最大推手?
真香,朕在看了! 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的Spring精华问答 | Spring Bean的自动装配是怎么回事?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马云卸任,张勇宣布未来五年目标:消费规模
- 下一篇: Spring精华问答 | Spring框