一、@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