@Required @Autowired @Resource注解詳解


一、@Required注解用於檢查特定的屬性是否設置

1.RequiredAnnotationBeanPostProcessor 為該注解的處理器,即bean后置處理器,檢查所有帶有該解的bean屬性是否設置,如果未設置則拋出異常。

2.在spring配置文件中可以通過<context:annotation-config/>元素自動注冊RequiredAnnotationBeanPostProcessor處理器。

3.RequiredAnnotationBeanPostProcessor處理器還能自定義注解用於檢查屬性,功能與@Required一致

   如:

   1.定義一個注解類型

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CustomRequired {

}

   2.配置RequiredAnnotationBeanPostProcessor,注入自定義注解類型

 <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor">
      <property name="requiredAnnotationType">
        <value>CustomRequired</value>      
      </property>
  </bean>

然后就可以使用@CustomRequired 檢查屬性是否設置,功能與@Required一致。

 

 

二、@Autowired根據類型注入bean屬性

1.AutowiredAnnotationBeanPostProcessor為該注解的處理器

2.在spring配置文件中可以通過<context:annotation-config/>元素自動注冊AutowiredAnnotationBeanPostProcessor處理器

3.默認情況下@Autowired的屬性是必須的,如果未設置會拋出異常。可以將@Autowired的required屬性設置為false,當未找到匹配的bean,則不設置標注的屬性

4.

  當注解到數組或List集合中,spring將所有類型匹配的bean注入到該數據或List集合中

  @Autowired

  private Generator[] generators;

  當注解到key為字符串的Map上,則將所有類型匹配的bean注入到map中,bean名稱為key。

 @Autowired

 private Map<String,Generator> generators;

 

注意:如果在類中指定 @PostConstruct 后置處理器,那么在其中就可以使用@Autowired等依賴注入的對象。

他們在后置處理器執行前就已經依賴注入好了。

 

5.@Qualifier注解可以限定@Autowired注解到按類型以及名稱注入bean。

 @Autowired

 @Qualifier("myGenerator")

 private Generator generator;   //則注入類型為Generator並且名稱為myGenerator的bean

 

6.@Autowired注入非集合和數組屬性時,如果發現多個匹配類型則報異常。因為按它按類型匹配,發現多個,無法確定注入哪個

 

三@Resource按名稱注入屬性,未找到則按類型注入。

1.CommonAnnotationBeanPostProcessor 為該注解的處理器  org.springframework.context.annotation.CommonAnnotationBeanPostProcessor

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM