Spring學習日誌之Bean的裝配

Spring容器負責創建應用程序中的bean並通過依賴注入來協調這些對象之間的關係。但是,作爲開發人員,要告訴Spring需要創建哪些bean並且如何將其裝配在一起。當描述bean如何裝配時,Spring提供了兩種主要的配置方式。

基於Java的配置

隱式配置

Spring通過組件掃描來實現隱式配置。

組件掃描

  • 如果在類上使用了@Component註解,則表明該類會作爲組件類,並告知Spring要爲這個類創建bean。
  • 組件掃描默認不開啓,需要在配置類上使用@ComponentScan註解。默認情況下@ComponentScan會掃描與配置類相同的包。任何這個包以及這個包下的所有子包中帶有@Component註解的類都會被掃描。
  • 可以爲@ComponentScan設置basePackages屬性來顯式指定要掃描的基礎包。指定時有三種實現方式:
    • String的形式來指定 - @ComponentScan(basePackages="myPackage")。此方式類型不安全,重構代碼後指定的基礎包可能會出現錯誤。
    • 指定爲包中所含的類或接口 - @ComponentScan(basePackages="Student.class")
    • 創建一個用來進行掃描的空標記接口。(推薦)
  • 使用了@Component註解的會得到一個類名首字母小寫的bean ID。

顯式配置

有些時候是不太適合使用隱式裝配的,比如要將第三方庫中的組件裝配到自己的代碼的時候。

  • 需要爲配置類添加一個@Configuration註解,表明該類是一個配置類,包含了如何Spring容器如何創建bean的細節。
  • 要在配置類中聲明bean,需要編寫一個帶有@Bean註解的方法,這個方法會創建所需類型的實例並返回。@Bean註解會告訴Spring該方法將會返回一個對象,該對象要註冊成爲Spring應用上下文中的bean,方法體中包含了產生bean實例的邏輯。
  • 默認情況下,生成的bean ID和帶有@Bean的方法的方法名相同。
  • 對帶有@Bean註解的方法的所有調用都會被Spring攔截,以此確保會直接返回該方法所創建的bean,而不是每次都對其進行實際調用。
  • 可以在配置類中直接引用其它的bean而不需加@autowired註解。

自動裝配

簡單來說,自動裝配就是讓Spring自動滿足依賴的一種方法,在滿足依賴的過程中,會在Spring上下文中尋找所需要的其它bean。爲了聲明要進行自動裝配,可以使用@Autowired註解。

  • @Autowired註解可以用在類的任何方法上。
  • @Autowired會根據所需bean的類型來進行搜索。
  • 如果沒有匹配的bean,那麼Spring將會拋出一個異常。爲了避免異常的出現,可以將@Autowiredrequired屬性設置爲false
  • 在聲明bean時,可以爲其中一個可選的bean添加@Primary註解來標記其爲首選,從而避免自動裝配時多個bean可以選的歧義性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章