多選擇是好事嘛?
Spring 經過十多年的快速發展和更新,以其獨特的創新帶來了大量的擁躉者,在選擇方面還帶來了更多選擇!譬如spring bean的組裝(在XML中進行明確配置、在Java中進行明確配置、隱式的bean發現機制和自動組裝),註解的多元化(基本註解、jsr250、jsr330)等等!
而這麼多重複的選擇難道真的是好事嗎?這是否也以為學習與成本提高,掌握的難度加大?
打個比喻:同樣可以救國,某個叫spring的神經病告訴你可以從醫救國(xml顯式配置),當你學醫正酣的時候,它又告訴你還可以從軍救國(Java顯示配置) ,當你練習擒拿射擊快要成功的時候,它來告訴你,其實有更簡單的方法可以教育救國(bean的自動裝配)!
作為一個初學者,個人認為,從學 servlet 到 jsp 再到 struts 到現在的 spring ,坑是越挖越大越挖越多啊!
廢話不多說了,以下來介紹幾個簡單的註解:
@Autowired註解:實現自動組裝。
1.在spring xml 設定檔中需要注入以下兩個類別:
<beans> <bean id="testA" class="..../TestA" /> <bean id="testUtil" class="..../TestUtil" /> </beans>
2.若想要在testUtil 類別中組裝testA 類,則可以在testUtil 類別中使用@Autowired註解;
如果想將TestA 注入到TestUtil 中,程式碼如下:
public class TestUtil{ @Autowired private Test testA; ....... }
簡單來說,自動組裝就是讓Spring自動滿足bean依賴的一種方法,在滿足依賴的過程中,會在Spring應用上下文中尋找匹配某個bean需求的其他bean。
@Autowired註解不僅能夠用在構造器上,還能用在方法上,和屬性上。如果沒有匹配的bean,那麼在應用上下文創建的時候,Spring會拋出一個異常。為了避免異常的出現,你可以將@Autowired的required屬性設為false:但是,把required屬性設為false時,你需要謹慎對待。如果在你的程式碼中沒有進行null檢查的話,這個處於未組裝狀態的屬性有可能會出現NullPointerException。
@Autowired他是spring特有的註解,如果你不願意在程式碼中到處使用Spring的特定註解來完成自動組裝任務的話,那麼你可以考慮將其替換為@Inject。
在自動組裝中,Spring同時支援@Inject(JSR330註解)和@Autowired。儘管@Inject和@Autowired之間有著一些細微的差別,但是在大多數場景下,它們都是可以互相替換的。
注意:1.它只是提供自動裝配,不提供注入;而注入是前提。
2. 若要實現自動組裝也需要導入
或也可使用
----------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------
@Qualifier註解:對依賴注入的條件進行限制。
如果@Autowired標註的依賴在容器中只能找到一個實例與之對應,則萬事OK,但是如果存在多個同意類型的物件實例,則 @Qualifier 註解將其作用。
假如Test 類別有兩個實現,TestA 和TestB,在spring 配置文件中配置代碼如下:
<beans> <bean id="testA" class="..../TestA" /> <bean id="testB" class="..../TestB" /> <bean id="testUtil" class="..../TestUtil" /> </beans>
如果想將TestA 注入到TestUtil 中,代碼如下:
public class TestUtil{ @Autowired @Qualifier("testA") private Test testA; private Test testB; ....... }
-------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------
@Resource(name=“”)註解:實現對bean 的注入。它的作用與@Autowired註解類似。
1.由於該註解是由JSR250引入的,故而在使用它之前需要導入jsr250相關jar包的支持,在pom.xml文件中加入以下內容:
<!-- jsr250注解包的引入 --> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency>
2.在spring配置文件中註入相關類:
假如testUtil 類別需要引入testA 類,在spring 設定檔中設定碼如下:
<beans> <bean id="testA" class="..../TestA" /> <bean id="testUtil" class="..../TestUtil" /> </beans> 3.在 testUtil 中加入
@Resource(name=「」)註解:
如果想將TestA 注入到TestUtil 中,程式碼如下:
注意:@Resource(name=“”) 中的name 為指定要注入的對象,testA 為spring 設定檔中所定義bean 的id。
<context:annotation-config /> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
备注:JSR250注解有 @PostConstruct,@PreDestroy 。
JSR330注解有 @Inject (代替 @AutoWired)、@Named (代替 @Component)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ComponentScan(basePackages=“×××××”)注解:启用组件扫描基础包。
1.在 spring 配置文件中加入
配置完成后,
备注:加入该元素后,就不需要再向 spring 配置文件中注入相关的类,即不需要再使用如下配置:
<beans> <bean id="testA" class="..../TestA" /> <bean id="testUtil" class="..../TestUtil" /> </beans>
2.
@Component public class TestUtil{ @Autowired private Test testA; ....... } @Component public class TestA{ private int a; private String ss; ... }
备注:(1)需要在两个类中都标注 @Component 注解。
(2)该注解是类级别的,它添加在类之上。
(3)@Component("id号")注解:表明该类会作为组件类,并告知Spring要为这个类创建bean。若id号为空,则默认使用以小写开头的类名!若使用自定义id号,则在后续的引用中需要引入以该id为标记。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。