spring annotation

建第一個註解java

package com.tmser.annotation;spring

   /**ide

 * *@interface用來聲明一個註解,其中的每個方法其實是聲明瞭一個配置參數。 *方法的名稱就是參數的名稱,返回值類型就是參數的類型。 *能夠經過default來聲明參數的默認值。 *在這裏能夠看到@Retention和@Target這樣的元註解,用來聲明註解自己的行爲。 *@Retention用來聲明註解的保留策略,有CLASS、RUNTIME和SOURCE這三種, *分別表示註解保存在類文件、JVM運行時刻和源代碼中。 *只有當聲明爲RUNTIME的時候,纔可以在運行時刻經過反射API來獲取到註解的信息。 *@Target用來聲明註解能夠被添加在哪些類型的元素上,如類型、方法和域等。  *就能夠定義一個註解了,它將自動繼承Annotation */

@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
//這裏定義了一個空的註解,它能幹什麼呢。我也不知道,但他能用。
}

類,方法,字段使用annotation,能夠經過反射獲取。post

Class getAnnotation(Class<T> annotationClass)code

Method getAnnotation(Class<T> annotationClass)blog

Filed  getAnnotation(Class<T> annotationClass)繼承

在spring中能夠結合BeanPostProcessor 實現,在 postProcessBeforeInitialization  處理每一個bean的類,方法,字段的annotation。get

BeanPostProcessor簡介:it

      Spring BeanPostProcesssor一般被稱爲Spring Bean回調處理器,它通常用於在實例化一個bean的先後增長一些附加操做,它會對全局的Spring bean配置生效。io

示例代碼:

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  //TODO 過濾一些不須要檢查的bean

  Class<?> beanClass = AopUtils.getTargetClass(bean);
  Field[] beanFields = beanClass.getDeclaredFields();
  for (Field beanField : beanFields) {
    if (!beanField.isAnnotationPresent(TestAnnotation.class)) {
      continue;
    }

    TestAnnotation testAnnotation = beanField.getAnnotation(LOSClient.class);
    //TODO 處理annotation

    ReflectionUtils.makeAccessible(beanField);
    try {
      //設置屬性
      beanField.set(bean, getBeanFieldInstance(beanField));
    }
    catch (Exception exception) {
      //TODO
    }
   }
  return bean;
}

參考:http://www.tmser.com/?post=34&page=4

相關文章
相關標籤/搜索