@Autowired的工作原理是什么?在啟動spring IoC時,容器自動裝載了一個AutowiredAnnotationBeanPostProcessor后置處理器,當容器掃描到@Autowired、@Resource或@Inject時,就會在IoC容器自動查找需要的bean,並裝配給該對象的屬性。
@Autowired:屬於Spring 的org.springframework.beans.factory.annotation包下,可用於為類的屬性、構造器、方法進行注值。
@Resource:不屬於Spring的注解,而是來自於JSR-250位於java.annotation包下,使用該annotation為目標bean指定協作者bean。
@Autowired注解自動裝配具有兼容類型的單個bean屬性,如指定的xxxService等。
-構造器,普通字段(即使是非public),一切只有參數的方法都可以應用@Autowired。
-默認情況下,當IOC容器里存在多個類型兼容的bean時,通過類型的自動裝配將無法工作。此時可以在@Qualifiter注解里提供bean的名稱,Spring允許對方法的入參標注 @Qualifiter以指定注入bean的名稱。
-@Autowired注解也可以應用在數組類型的屬性上,此時Spring將會把所有匹配的bean進行自動匹配。
-@Autowired注解也可以應用在集合屬性上,此時Spring讀取該集合的類型信息,然后自動裝配所有與之兼容的bean。
-@Autowired注解用在java.util.Map上時,Map的key必須是String類型,那么Spring將自動裝配與之Map值類型兼容的bean,此時bean的名稱作為鍵值。
相關@Autowired注解的更詳細介紹,請移步如下文章:
- Spring注解之@Autowired組件裝配
- Spring注解之@Autowired:裝配構造函數和屬性
- Spring注解之@Autowired:Setter 方法上使用@Autowired注解
- Spring注解之@Autowired:注入Arrays, Collections, and Maps
