Spring核心——註解的後置處理器

實際上Ioc容器中的大量功能都是經過後置處理器實現的,這裏介紹幾個主要的處理器。spring

RequiredAnnotationBeanPostProcessor

官方的一些功能就是用後置處理器的方式實現的,例如RequiredAnnotationBeanPostProcessor,它用於處理@Required註解。當咱們一個Setter方法加入@Required後,表示必須設置參數,若是未設置則拋出BeanInitializationException異常。框架

使用方法1,直接添加一個Bean:ui

<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />
<!-- 其餘bean -->

這至關於直接添加一個後置處理器,他會檢查全部的被@Required標註的Setter方法。spa

使用方法2,設置context:code

<!-- 若是使用瞭如下2個context級別的標籤,則會啓用RequiredAnnotationBeanPostProcessor的功能 -->
<context:annotation-config />
<context:component-scan />

使用技巧1,修改掃描的註解。處理器默認會識別@Required註解,可是能夠經過RequiredAnnotationBeanPostProcessor::setRequiredAnnotationType修改生效的註解,例如:component

<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor">
   <property name="requiredAnnotationType" value="x.y.Require" />
</bean>
package x.y;

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

使用技巧2,告知RequiredAnnotationBeanPostProcessor不處理某些Bean方法:繼承

<bean class="x.y.A">
    <meta  key="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor.skipRequiredCheck" value="true" />
</bean>

AutowiredAnnotationBeanPostProcessor

這個後置處理器在3.x以後使用Spring框架的系統幾乎都會使用,就是他在處理大名鼎鼎的@Autowired和@Value註解。此外他也支持JSR-330中的@Inject註解。當咱們使用<context:annotation-config />
或<context:component-scan />時,IoC容器也會啓用這個功能。生命週期

能夠經過setAutowiredAnnotationType、setAutowiredAnnotationTypes方法設定對應的註解,能夠經過setRequiredParameterName來設置@Autowired中的屬性方法:ip

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
   <property name="autowiredAnnotationType" value="x.y.MyInjectAnnotation" />
</bean>

CommonAnnotationBeanPostProcessor

這個處理器繼承InitDestroyAnnotationBeanPostProcessor實現JSR-250的@PostConstruct和@PreDestroy的處理,此外還支持@Resource註解。JSR-250和Resouce貌似沒有什麼太直接的關係,因此被命名爲Common表示這是一個大雜燴通常的存在。一樣使用annotation-config和component-scan會被自動啓用(由於都是用於處理註解的)。資源

一樣也有initAnnotationType、destroyAnnotationType等Setter方法來設置自定義註解。

InitDestroyAnnotationBeanPostProcessor

處理Bean的生命週期方法以及資源數據注入,CommonAnnotationBeanPostProcessor繼承自它。

相關文章
相關標籤/搜索