Spring 註解大全與詳解

這裏主要是對spring中註釋的含義、參數進行介紹html

  • @Component

  1. 含義

  表示帶註釋的類是「組件」。當使用基於註釋的配置和類路徑掃描時,這些類被視爲自動檢測的候選者。
  至關於在配置文件中配置bean。java

<bean id="student" class="com.yellowdoge.hxl.model.Student">
    <property name="name" value="hxl"></property>
    <property name="age" value="19"></property>
</bean>
複製代碼
  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component {
    String value() default "";
}
複製代碼

  參數value的默認值爲「」,若是傳了值那麼這個值就是該類在spring容器中的id,默認狀況下id爲該類名稱首字母小寫。假設一個類的名字爲Student,使用了默認參數,它的id就應該是student。git

  • @Repository

  1. 含義

  表示帶註釋的類是「存儲庫」,最初由域驅動設計(Evans,2003)定義爲「用於封裝模擬對象集合的存儲,檢索和搜索行爲的機制」。
  實現傳統Java EE模式(如「數據訪問對象」)的團隊也能夠將此構造型應用於DAO類,但在此以前應注意理解數據訪問對象和DDD樣式存儲庫之間的區別。
  在註解了@Repository的類上若是數據庫操做中拋出了異常,就能對其進行處理,轉而拋出的是翻譯後的spring專屬數據庫異常,方便咱們對異常進行排查處理。
  從Spring 2.5開始,這個註釋也能夠做爲一個特化@Component,容許經過類路徑掃描自動檢測實現類。github

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
    String value() default "";
}
複製代碼

  參數value的默認值爲「」,若是傳了值那麼這個值就是該類在spring容器中的id,默認狀況下id爲該類名稱首字母小寫。假設一個類的名字爲StudentDao,使用了默認參數,它的id就應該是studentDao。web

  • @Controller

  1. 含義

  表示帶註釋的類是「控制器」(例如Web控制器)。此註釋用做特殊化@Component,容許經過類路徑掃描自動檢測實現類。它一般與基於RequestMapping註釋的帶註釋的處理程序方法結合使用 。正則表達式

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    String value() default "";
}
複製代碼

  參數value的默認值爲「」,若是傳了值那麼這個值就是該類在spring容器中的id,默認狀況下id爲該類名稱首字母小寫。假設一個類的名字爲StudentController,使用了默認參數,它的id就應該是studentController。spring

  • @Service

  1. 含義

  表示帶註釋的類是「服務」,最初由域驅動設計(Evans,2003)定義爲「做爲模型中獨立的接口提供的操做,沒有封裝狀態」。
  也可能代表一個類是「Business Service Facade」(在覈心J2EE模式意義上)或相似的東西。
  此註釋用做特殊化@Component,容許經過類路徑掃描自動檢測實現類。數據庫

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
    String value() default "";
}
複製代碼

  參數value的默認值爲「」,若是傳了值那麼這個值就是該類在spring容器中的id,默認狀況下id爲該類名稱首字母小寫。假設一個類的名字爲StudentService,使用了默認參數,它的id就應該是studentService。編程

  • @Autowired

  1. 含義

  枚舉肯定自動裝配狀態:即,bean是否應該使用setter注入由Spring容器自動注入其依賴項。@Autowired默認是按照類型裝配注入的。這是Spring DI的核心概念。
  可用於基於註釋的配置,例如AspectJ AnnotationBeanConfigurer方面。數組

  1. 參數

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, > > ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}
複製代碼

  參數required的默認值爲true,表示在默認狀況下必需要求依賴對象必須存在,若是要容許null 值,能夠設置它的required屬性爲false,如:@Autowired(required=false) ,若是咱們想使用名稱裝配能夠結合@Qualifier註解進行使用,以下:

@Autowired() 
@Qualifier("baseDao")     
private BaseDao baseDao;    
複製代碼
  • @Resource

  1. 含義

  這是jsr250規範的實現,@Resource經過 「CommonAnnotationBeanPostProcessor」 類實現依賴注入。   @Resource標記應用程序所需的資源。此註釋能夠應用於應用程序組件類,或應用於組件類的字段或方法。
  當註釋應用於字段或方法時,容器將在初始化組件時將所請求資源的實例注入應用程序組件。 若是註釋應用於組件類,則應用程序會在運行時尋找資源。
  即便此註釋未標記爲繼承,也須要部署工具檢查任何組件類的全部超類,以發現此註釋在全部超類中的全部用法。 全部這些註釋實例都指定應用程序組件所需的資源。
  請注意,此註釋可能出如今超類的私有字段和方法上;在這些狀況下,容器也須要進行注射。

  1. 參數

@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {
    /** * The JNDI name of the resource. For field annotations, * the default is the field name. For method annotations, * the default is the JavaBeans property name corresponding * to the method. For class annotations, there is no default * and this must be specified. */
    String name() default "";

   /** * The name of the resource that the reference points to. It can * link to any compatible resource using the global JNDI names. * * @since Common Annotations 1.1 */

    String lookup() default "";

    /** * The Java type of the resource. For field annotations, * the default is the type of the field. For method annotations, * the default is the type of the JavaBeans property. * For class annotations, there is no default and this must be * specified. */
    Class<?> type() default java.lang.Object.class;

    /** * The two possible authentication types for a resource. */
    enum AuthenticationType {
            CONTAINER,
            APPLICATION
    }

    /** * The authentication type to use for this resource. * This may be specified for resources representing a * connection factory of any supported type, and must * not be specified for resources of other types. */
    AuthenticationType authenticationType() default AuthenticationType.CONTAINER;

    /** * Indicates whether this resource can be shared between * this component and other components. * This may be specified for resources representing a * connection factory of any supported type, and must * not be specified for resources of other types. */
    boolean shareable() default true;

    /** * A product specific name that this resource should be mapped to. * The name of this resource, as defined by the <code>name</code> * element or defaulted, is a name that is local to the application * component using the resource. (It's a name in the JNDI * <code>java:comp/env</code> namespace.) Many application servers * provide a way to map these local names to names of resources * known to the application server. This mapped name is often a * <i>global</i> JNDI name, but may be a name of any form. <p> * * Application servers are not required to support any particular * form or type of mapped name, nor the ability to use mapped names. * The mapped name is product-dependent and often installation-dependent. * No use of a mapped name is portable. */
    String mappedName() default "";

    /** * Description of this resource. The description is expected * to be in the default language of the system on which the * application is deployed. The description can be presented * to the Deployer to help in choosing the correct resource. */
    String description() default "";
}
複製代碼

  參數name的默認值爲「」,表示資源的jndi名稱。當註釋的字段時,就爲字段名稱;當註釋的方法時,就爲java beans的名稱;當註釋的類時,沒有默認值,必須聲明name的值。
  參數lookup的默認值爲「」,表示資源名稱的參考點,它可使用全局JNDI名稱連接到任何兼容的資源。
  參數type的默認值是java.lang.Object.class,表示資源的java類型。當註釋的字段時,就爲字段對應的類型;當註釋的方法時,就爲java beans的java類型;當註釋的類時,沒有默認值,必須聲明type的值。
  參數authenticationType的默認值爲AuthenticationType.CONTAINER,表示任何受支持類型的鏈接工廠的資源指定此方法,不得爲其餘類型的資源指定。   參數shareable的默認值爲true,表示兩個組件之間是否共享此資源,任何受支持類型的鏈接工廠的資源指定此方法,不得爲其餘類型的資源指定。
  參數mappedName的默認值爲「」,表示資源映射到的特定產品的名稱。資源的名稱使用name元素或默認定義,則該名稱是本地應用組件的使用名稱(命名空間:java:comp/env)。許多應用程序服務器都提供一種方式將這些本地名稱映射到應用程序服務器已知的資源名稱。此映射的名稱一般是全局JNDI名稱,但也能夠是任何形式的名稱。應用程序服務器不須要支持任何特殊形式或類型的映射名稱,也不須要具備使用映射名稱的能力。
  參數description的默認值爲「」,表示資源的描述(應用程序的系統的默認語言)。

  • @Inject

  1. 含義

  這是jsr330中的規範,經過‘AutowiredAnnotationBeanPostProcessor’ 類實現的依賴注入。屬於類型注入。

  1. 參數

@Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Inject {
}
複製代碼

  @Inject沒有參數,可是和它有個經常使用搭配。以下是@Inject的使用,不加@Named註解,須要配置與變量名一致便可。   

@Inject
@Named("mongo")
private Mongo mongo;
複製代碼
  • @Configuration

  1. 含義

  @Configuration是把一個類變成一個配置類,即在這個類中能夠用@Bean標識方法,而且把方法返回的對象加入到spring容器中,而且返回的是同一個實例。
  配置類必須以類的形式提供(不能是工廠方法返回的實例),容許經過生成子類在運行時加強(cglib 動態代理)。配置類不能是 final 類(無法動態代理)。配置註解一般爲了經過 @Bean 註解生成 Spring 容器管理的類。配置類必須是非本地的(即不能在方法中聲明,不能是 private)。任何嵌套配置類都必須聲明爲static。@Bean 方法可能不會反過來建立進一步的配置類(也就是返回的 bean 若是帶有@Configuration,也不會被特殊處理,只會做爲普通的 bean)。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String value() default "";
}
複製代碼

  參數value的默認值爲「」,若是傳了值那麼這個值就是該類在spring容器中的id,默認狀況下id爲該類名稱首字母小寫。假設一個類的名字爲StudentConfiguration,使用了默認參數,它的id就應該是studentConfiguration。

  • @ComponentScan

  1. 含義

  @ComponentScan主要是定義掃描的路徑並從中找出標識了須要裝配的類自動裝配到spring的bean容器中。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};

    @AliasFor("value")
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;

    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;

    String resourcePattern() default "**/*.class"; boolean useDefaultFilters() default true; ComponentScan.Filter[] includeFilters() default {}; ComponentScan.Filter[] excludeFilters() default {}; boolean lazyInit() default false; @Retention(RetentionPolicy.RUNTIME) @Target({}) public @interface Filter { FilterType type() default FilterType.ANNOTATION; @AliasFor("classes") Class<?>[] value() default {}; @AliasFor("value") Class<?>[] classes() default {}; String[] pattern() default {}; } } 複製代碼

  參數value別名basePackages,默認值爲空的String數組,String數組中的路徑會被掃描並把標識了須要裝配的類自動裝配到spring的bean容器中。value和basePackages不能同時設置。
  參數basePackages別名value,默認值爲空的String數組,String數組中的路徑會被掃描並把標識了須要裝配的類自動裝配到spring的bean容器中。value和basePackages不能同時設置。
  參數basePackageClasses默認值爲空的java Class數組。在數組中指定具體的掃描的類。
  參數nameGenerator指定對應的bean名稱的生成器,默認的是BeanNameGenerator。
  參數scopeResolver指定對應的處理檢測到bean的scope範圍處理類,默認的是AnnotationScopeMetadataResolver。
  參數scopedProxy指定代理模式,默認爲ScopedProxyMode.DEFAULT。下面是ScopedProxyMode枚舉類。   

public enum ScopedProxyMode {
    DEFAULT,
    NO,
    INTERFACES,
    TARGET_CLASS;

    private ScopedProxyMode() {
    }
}
複製代碼

  參數resourcePattern默認值爲「**/*.class」,在這裏能夠配置正則表達式以此來選擇想要掃描的全部指定的包路徑下的類。
  參數useDefaultFilters表示是否對帶有@Component @Repository @Service @Controller註解的類開啓檢測,默認是開啓的。
  參數includeFilters表示哪些類型符合組件掃描的條件。FilterType有5種類型如:

  • ANNOTATION, 註解類型 默認
  • ASSIGNABLE_TYPE,指定固定類
  • ASPECTJ,ASPECTJ類型
  • REGEX,正則表達式
  • CUSTOM,自定義類型

  參數excludeFilters表示哪些類型不符合組件掃描的條件。
  參數lazyInit表示是否應註冊掃描的bean以進行延遲初始化。默認是不開啓。
  

  • @Bean

  1. 含義

  @Bean用於註釋方法,表示該方法返回的Bean會被放入spring容器中。

  1. 參數

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
    @AliasFor("name")
    String[] value() default {};

    @AliasFor("value")
    String[] name() default {};

    Autowire autowire() default Autowire.NO;

    String initMethod() default "";

    String destroyMethod() default "(inferred)";
}
複製代碼

  參數value別名name,默認值爲空的String數組,String數組中的名稱都會變成這個bean的id。value和name不能同時設置。
  參數name別名value,默認值爲空的String數組,String數組中的名稱都會變成這個bean的id。value和name不能同時設置。
  參數autowire表示是否經過名稱或類型的約定自動裝配注入依賴項。
  參數initMethod表示初始化期間調用bean實例的方法的可選名稱。
  參數destroyMethod表示關閉應用程序上下文時調用bean實例的方法的可選名稱。
  

  • @Aspect

  1. 含義

  @Aspect的做用是把當前類標識爲一個切面類供容器讀取。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Aspect {
    String value() default "";
}
複製代碼

  參數value默認值爲「」,表示這個類在spring容器中的id。

  • @After

  1. 含義

  final加強,不論是拋出異常或者正常退出都會執行。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface After {
    String value();

    String argNames() default "";
}
複製代碼

  參數value無默認值,必須聲明,用於指定方法,在指定方法執行結束時執行@After註釋的方法。
  參數argNames默認值爲「」,argNames屬性是用於指定在表達式中應用的參數名與Advice方法參數是如何對應的,argNames中指定的參數名必須與表達式中的一致,能夠與Advice方法參數名不一致;當表達式中使用了多個參數時,argNames中須要指定多個參數,多個參數之間以英文逗號分隔,這些參數的順序必須與對應的Advice方法定義的參數順序是一致的。。

  • @Before

  1. 含義

  標識一個前置加強方法,至關於BeforeAdvice的功能。

  1. 參數

  

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Before {
    String value();

    String argNames() default "";
}
複製代碼

  參數value無默認值,必須聲明,用於指定方法,在指定方法執行前執行@After註釋的方法。
  參數argNames默認值爲「」,argNames屬性是用於指定在表達式中應用的參數名與Advice方法參數是如何對應的,argNames中指定的參數名必須與表達式中的一致,能夠與Advice方法參數名不一致;當表達式中使用了多個參數時,argNames中須要指定多個參數,多個參數之間以英文逗號分隔,這些參數的順序必須與對應的Advice方法定義的參數順序是一致的。。
  

  • @Around

  1. 含義

  環繞加強,至關於MethodInterceptor。

  1. 參數

  

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Around {
    String value();

    String argNames() default "";
}
複製代碼

  參數value無默認值,必須聲明,用於指定方法,至關於把指定的方法插入到@After註釋的方法中執行。
  參數argNames默認值爲「」,argNames屬性是用於指定在表達式中應用的參數名與Advice方法參數是如何對應的,argNames中指定的參數名必須與表達式中的一致,能夠與Advice方法參數名不一致;當表達式中使用了多個參數時,argNames中須要指定多個參數,多個參數之間以英文逗號分隔,這些參數的順序必須與對應的Advice方法定義的參數順序是一致的。。
  

  • @PointCut(AspectJ)

  1. 含義

  聲明一個切入點。    2. ### 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface PointCut {
    String value() default "";

    String argNames() default "";
}
複製代碼

  參數value默認值爲「」,用於指定截取的方法。而且能夠把註釋的方法名字當作簽名供@Around、@Before、@After等Advice方法使用。
  參數argNames默認值爲「」,argNames屬性是用於指定在表達式中應用的參數名與Advice方法參數是如何對應的,argNames中指定的參數名必須與表達式中的一致,能夠與Advice方法參數名不一致;當表達式中使用了多個參數時,argNames中須要指定多個參數,多個參數之間以英文逗號分隔,這些參數的順序必須與對應的Advice方法定義的參數順序是一致的。。
  

  • @Transactional

  1. 含義

  描述方法或類的事務屬性。
  這個註釋類型一般能夠直接與Spring的RuleBasedTransactionAttribute 類相媲美 ,實際上它AnnotationTransactionAttributeSource會直接將數據轉換爲後一個類,所以Spring的事務支持代碼沒必要知道註釋。若是沒有規則相關的例外,它會像對待 DefaultTransactionAttribute (回滾到RuntimeException和Error,但不會對檢查的異常)。

  1. 參數

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
    @AliasFor("transactionManager")
    String value() default "";

    @AliasFor("value")
    String transactionManager() default "";

    Propagation propagation() default Propagation.REQUIRED;

    Isolation isolation() default Isolation.DEFAULT;

    int timeout() default -1;

    boolean readOnly() default false;

    Class<? extends Throwable>[] rollbackFor() default {};

    String[] rollbackForClassName() default {};

    Class<? extends Throwable>[] noRollbackFor() default {};

    String[] noRollbackForClassName() default {};
}
複製代碼

  參數value的別名爲transactionManager,默認值爲「」,可選的限定描述符,指定使用的事務管理器。value和transactionManager不能同時指定。
  參數transactionManager的別名爲value,默認值爲「」,可選的限定描述符,指定使用的事務管理器。value和transactionManager不能同時指定。
  參數propagation設置事務傳播行爲。
  參數isolation設置事務隔離級別。
  參數timeout設置事務超時時間。
  參數readOnly設置事務是否只讀,默認讀寫。
  參數rollbackFor設置致使事務回滾的異常類數組。
  參數rollbackForClassName設置致使事務回滾的異常類名字數組。
  參數noRollbackFor設置不會致使事務回滾的異常類數組。
  參數noRollbackForClassName設置不會致使事務回滾的異常類名字數組。

  • @Cacheable

  1. 含義

  註釋指示能夠緩存調用方法(或類中的全部方法)的結果。
  每次調用一個建議的方法時,都會應用緩存行爲,檢查是否已經爲給定的參數調用了該方法。合理的默認值只是使用方法參數來計算鍵,但能夠經過key()屬性提供SpEL表達式,或者自定義 KeyGenerator實現能夠替換默認值(請參閱參考資料keyGenerator())。
  若是在計算鍵的高速緩存中未找到任何值,則將調用目標方法並將返回的值存儲在關聯的高速緩存中。請注意,Java8的Optional返回類型會自動處理,其內容存儲在緩存中(若是存在)。
  此註釋可用做元註釋,以建立具備屬性覆蓋的自定義組合註釋。

  1. 參數

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Cacheable {
    @AliasFor("cacheNames")
    String[] value() default {};

    @AliasFor("value")
    String[] cacheNames() default {};

    String key() default "";

    String keyGenerator() default "";

    String cacheManager() default "";

    String cacheResolver() default "";

    String condition() default "";

    String unless() default "";

    boolean sync() default false;
}
複製代碼

  參數value的別名爲cacheNames,默認值爲空的String數組,指定存儲方法調用結果的高速緩存的名稱。value和cacheNames不能同時指定。
  參數cacheNames的別名爲value,默認值爲空的String數組,指定存儲方法調用結果的高速緩存的名稱。value和cacheNames不能同時指定。
  參數key爲用於動態計算密鑰的Spring Expression Language(SpEL)表達式。若是不指定,則缺省按照方法的全部參數進行組合。
  參數keyGenerator用於指定要使用的自定義KeyGenerator的bean名稱。
  參數cacheManager默認值爲「」,在未設置CacheManager的狀況下用於指定自定義CacheManager的bean的名稱。
  參數cacheResolver默認值爲「」,用於指定自定義的CacheResolver的bean的名稱。
  參數condition使用Spring Expression Language(SpEL)表達式,用於指定方法緩存條件。
  參數unless使用Spring Expression Language(SpEL)表達式,用於指定否決方法緩存條件。
  參數sync表示當多個線程正在嘗試加載同一個鍵的值,是否同步基礎方法的調用。默認爲不一樣步。

  • @EnableAspectJAutoProxy

  1. 含義

  支持處理使用AspectJ @Aspect註釋標記的組件,相似於Spring的aop:aspectj-autoproxyXML元素中的功能。通常和@Configuration一塊兒使用。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AspectJAutoProxyRegistrar.class})
public @interface EnableAspectJAutoProxy {
    boolean proxyTargetClass() default false;

    boolean exposeProxy() default false;
}
複製代碼

  參數proxyTargetClass指示是否要建立基於子類的(CGLIB)代理而不是基於標準Java接口的代理。
  參數exposeProxy指示代理是否應由AOP框架公開,做爲ThreadLocal 以便經過AopContext類進行檢索。

  • @Value

  1. 含義

  字段或方法/構造函數參數級別的註釋,指示受影響參數的默認值表達式。
  一般用於表達式驅動的依賴注入。還支持動態解析處理程序方法參數,例如在Spring MVC中。
  常見的用例是使用「#{systemProperties.myProp}」樣式表達式分配默認字段值。

  1. 參數

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
    String value();
}
複製代碼

  參數value沒有默認值,必須聲明。參數爲Spel表達式。

  • @PropertySource

  1. 含義

  註釋提供了一個方便的聲明機制,用於添加一個PropertySource到Spring的 Environment。與@Configuration一塊兒使用。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {
    String name() default "";

    String[] value();

    boolean ignoreResourceNotFound() default false;

    String encoding() default "";

    Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class;
}
複製代碼

  參數name默認值爲「」,指定此屬性源的名稱。
  參數value無默認值,必須聲明。指示要加載的屬性文件的資源位置。
  參數ignoreResourceNotFound指示當property resource未找到時是否忽略。
  參數encoding給定資源的特定字符編碼。
  參數factory指定自定義PropertySourceFactory。

  • @PostConstruct

  1. 含義

  被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,而且只會被服務器執行一次。PostConstruct在構造函數以後執行,init()方法以前執行。

  1. 參數

@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PostConstruct {
}
複製代碼

  無參數。

  • @PreDestroy

  1. 含義

  PreDestroy()方法在destroy()方法以後執行。

  1. 參數

@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PreDestroy {
}
複製代碼

  無參數。

  • @Profile

  1. 含義

  表示當一個或多個指定的文件處於活動狀態時,這個組件是有資格註冊的。使用@Profile註解類或者方法,達到在不一樣狀況下選擇實例化不一樣的Bean。@Profile(「dev」)表示當環境爲dev時實例化。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({ProfileCondition.class})
public @interface Profile {
    String[] value();
}
複製代碼

  參數value無默認值,必須聲明。表示組件能夠被註冊時的profiles集合。

  • @EnableAsync

  1. 含義

  啓用Spring的異步方法執行功能,相似於Spring的task:*XML命名空間中的功能。 要與@Configuration一塊兒使用。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AsyncConfigurationSelector.class})
public @interface EnableAsync {
    Class<? extends Annotation> annotation() default Annotation.class;

    boolean proxyTargetClass() default false;

    AdviceMode mode() default AdviceMode.PROXY;

    int order() default 2147483647;
}
複製代碼

  參數annotation指示要在類或方法級別檢測的「異步」註釋類型。
  參數proxyTargetClass指示是否要建立基於子類的(CGLIB)代理而不是基於標準Java接口的代理。
  參數mode指定應如何應用異步通知。AdviceMode有兩種類型:

  • PROXY
  • ASPECTJ

  參數order指出AsyncAnnotationBeanPostProcessor應該應用的順序。值小的優先。

  • @Async

  1. 含義

  將方法標記爲異步執行候選的註釋。也能夠在class級別使用,在這種狀況下,全部類型的方法都被視爲異步。
  就目標方法簽名而言,支持任何參數類型。可是,返回類型被限制爲void或者 Future。在後一種狀況下,您能夠聲明更具體的類型ListenableFuture或 CompletableFuture類型,以容許與異步任務進行更豐富的交互,並經過進一步的處理步驟當即組合。
  Future從代理返回的句柄將是一個實際的異步 Future,可用於跟蹤異步方法執行的結果。可是,因爲目標方法須要實現相同的簽名,所以必須返回一個臨時Future句柄,該句柄只傳遞一個值:例如Spring AsyncResult,EJB 3.1 AsyncResult或者CompletableFuture.completedFuture(Object)。

  1. 參數

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Async {
    String value() default "";
}
複製代碼

  參數value默認值爲「」,指定異步操做的限定符值。

  • @EnableScheduling

  1. 含義

  啓用Spring的計劃任務執行功能,相似於Spring的task:*XML命名空間中的功能。要在和@Configuration一同使用。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import({SchedulingConfiguration.class})
@Documented
public @interface EnableScheduling {
}
複製代碼

  無參數。

  • @Scheduled

  1. 含義

  用於標記一個須要按期執行的方法。cron(),fixedDelay()或fixedRate()中的至少一個屬性必須指定參數。
  帶註釋的方法必須沒有參數。它一般會有一個void返回類型; 若是不是,則經過調度程序調用時將忽略返回的值。
  經過註冊ScheduledAnnotationBeanPostProcessor來執行@Scheduled註釋的處理。這能夠手動完成,也能夠經過<task:annotation-driven />元素或@EnableScheduling註釋更方便地完成。
  此註釋可用做元註釋,以建立具備屬性覆蓋的自定義組合註釋。

  1. 參數

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
    String cron() default "";

    String zone() default "";

    long fixedDelay() default -1L;

    String fixedDelayString() default "";

    long fixedRate() default -1L;

    String fixedRateString() default "";

    long initialDelay() default -1L;

    String initialDelayString() default "";
}
複製代碼

  參數cron是一個相似cron的表達式,擴展了一般的UN * X定義,包括第二個以及分鐘,小時,星期幾,月和星期幾的觸發器。
  參數zone表示解析cron表達式的時區。
  參數fixedDelay設置在上一次調用結束和下一次調用開始之間以固定週期(以毫秒爲單位)執行帶註釋的方法。
  參數fixedDelayString設置在上一次調用結束和下一次調用開始之間以固定週期(以毫秒爲單位)執行帶註釋的方法。
  參數fixedRate設置在上一次調用開始和下一次調用開始之間以固定的週期(以毫秒爲單位)執行帶註釋的方法。
  參數fixedRateString設置在上一次調用開始和下一次調用開始之間以固定的週期(以毫秒爲單位)執行帶註釋的方法。
  參數initialDelay設置在第一次執行fixedRate()或fixedDelay()任務以前延遲的毫秒數 。
  參數initialDelayString設置在第一次執行fixedRate()或fixedDelay()任務以前延遲的毫秒數 。

  • @Conditional

  1. 含義

  表示只有在全部指定條件匹配時,組件纔有資格進行註冊。
  任何能夠經過編程肯定在bean被註冊以前的狀態(見任何狀態Condition的詳細信息)均可以是條件。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
    Class<? extends Condition>[] value();
}
複製代碼

  參數value無默認值,必須聲明。參數類型爲實現了Condition接口的class。

  • @Enable*

  1. 含義

  @enable*是springboot中用來啓用某一個功能特性的一類註解。其中包括咱們經常使用的@SpringBootApplication註解中用於開啓自動注入的annotation @EnableAutoConfiguration,開啓異步方法的annotation @EnableAsync,開啓將配置文件中的屬性以bean的方式注入到IOC容器的annotation@EnableConfigurationProperties等。

  • @RunWith

  1. 含義

  JUnit用例都是在Runner(運行器)來執行的。經過它,能夠爲這個測試類指定一個特定的Runner。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Inherited
public @interface RunWith {
    Class<? extends Runner> value();
}
複製代碼

  參數value無默認值,必須聲明。參數類型爲實現了Runner接口的class。
  經常使用Runner類有:

  • JUnit4.class

  • SpringJUnit4ClassRunner.class

  • Suite.class

  • Parameterized.class

  • Categories.class

  • Theories.class

  • @ContextConfiguration

  1. 含義

  @ContextConfiguration定義class級元數據,用於肯定如何加載和配置ApplicationContext集成測試。
  在Spring 3.1以前,僅支持基於路徑的資源位置(一般是XML配置文件)。在Spring 3.1中,背景裝載機能夠選擇支持任何基於路徑或基於類的資源。在Spring 4.0.4中,上下文裝載機能夠選擇支持基於路徑 和同時基於類的資源。所以 @ContextConfiguration可用於聲明基於路徑的資源位置(經過locations()或value()屬性)或帶 註釋的類(經過classes()屬性)。但請注意,大多數實現SmartContextLoader僅支持單一資源類型。從Spring 4.1開始,基於路徑的資源位置能夠是XML配置文件或Groovy腳本(若是Groovy在類路徑上)。固然,第三方框架能夠選擇支持其餘類型的基於路徑的資源。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ContextConfiguration {
    @AliasFor("locations")
    String[] value() default {};

    @AliasFor("value")
    String[] locations() default {};

    Class<?>[] classes() default {};

    Class<? extends ApplicationContextInitializer<?>>[] initializers() default > {};

    boolean inheritLocations() default true;

    boolean inheritInitializers() default true;

    Class<? extends ContextLoader> loader() default ContextLoader.class;

    String name() default "";
}
複製代碼

  參數value別名locations,默認值爲空String字符數組。用於指定加載ApplicationContext的資源位置 。value和locations不能同時設置。
  參數locations別名value,默認值爲空String字符數組。用於指定加載ApplicationContext的資源位置 。value和locations不能同時設置。
  參數classes用於指定加載ApplicationContext的註釋類。
  參數initializers指定用於初始化ConfigurableApplicationContext的程序上下文初始化類。
  參數inheritLocations設置是否應繼承測試超類中的resource locations或註釋類。
  參數inheritInitializers設置是否應繼承來自測試超類的上下文初始值設定項。
  參數name設置這個配置的上下文層次結構級別的名稱。

  • @ActiveProfiles

  1. 含義

  @ActiveProfiles是一個class級別註釋,用於聲明在加載 ApplicationContext來測試時應使用哪些活動Bean定義配置文件。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ActiveProfiles {
    @AliasFor("profiles")
    String[] value() default {};

    @AliasFor("value")
    String[] profiles() default {};

    Class<? extends ActiveProfilesResolver> resolver() default ActiveProfilesResolver.class;

    boolean inheritProfiles() default true;
}
複製代碼

  參數value別名profiles,默認值爲空String字符數組。用於指定要激活的bean定義配置文件。value和profiles不能同時設置。
  參數profiles別名value,默認值爲空String字符數組。用於指定要激活的bean定義配置文件。value和profiles不能同時設置。
  參數resolver指定用於處理bean定義配置文件的ActiveProfilesResolver。
  參數inheritProfiles設置是否應繼承超類中的bean定義配置文件 。

  • @EnableWebMvc

  1. 含義

  將此註釋添加到帶有@Configuration的類中會從WebMvcConfigurationSupport中導入Spring MVC配置。
  要自定義導入的配置,請實現接口WebMvcConfigurer並重寫要自定義的方法。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
}
複製代碼

  無參數。

  • @RequestMapping

  1. 含義

  使用靈活方法簽名將Web請求映射到請求處理類中的方法的註釋。

  1. 參數

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}
複製代碼

  參數name默認值爲「」。用於指定該映射的名稱。
  參數value別名path。用於指定映射的一個或者多個路由。value和profiles不能同時設置。
  參數path別名value。用於指定映射的一個或者多個路由。value和profiles不能同時設置。
  參數method用於指定該映射響應的請求的方法,縮小映射範圍,包括GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE。
  參數params用於指定該映射響應的請求的參數,縮小映射範圍,能夠實現多個方法處理同一個URL。
  參數headers用於指定該映射響應的請求的消息頭,縮小映射範圍。
  

http請求報文
  參數consumes用於指定該映射響應的請求的Content-Type,縮小映射範圍。
  參數produces用於指定該映射響應的請求的Accept,縮小映射範圍。

  • @GetMapping

  1. 含義

  用於將GET類型的HTTP請求映射到特定處理方法的註釋。
  具體來講,@GetMapping是一個做爲快捷方式的組合註釋@RequestMapping(method = RequestMethod.GET)。

  1. 參數

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(
    method = {RequestMethod.GET}
)
public @interface GetMapping {
    @AliasFor(
        annotation = RequestMapping.class
    )
    String name() default "";

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] value() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] path() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] params() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] headers() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] consumes() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] produces() default {};
}
複製代碼

  參數name別名RequestMapping.name(),做用同RequestMapping.name。
  參數value別名RequestMapping.value(),做用同RequestMapping.value。
  參數path別名RequestMapping.path(),做用同RequestMapping.path。
  參數params別名RequestMapping.params(),做用同RequestMapping.params。
  參數headers別名RequestMapping.headers(),做用同RequestMapping.headers。
  參數consumes別名RequestMapping.consumes(),做用同RequestMapping.consumes。
  參數produces別名RequestMapping.produces(),做用同RequestMapping.produces。

  • @PostMapping

  1. 含義

  用於將POST類型的HTTP請求映射到特定處理方法的註釋。
  具體來講,@PostMapping是一個做爲快捷方式的組合註釋@RequestMapping(method = RequestMethod.POST)。

  1. 參數

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(
    method = {RequestMethod.POST}
)
public @interface PostMapping {
    @AliasFor(
        annotation = RequestMapping.class
    )
    String name() default "";

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] value() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] path() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] params() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] headers() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] consumes() default {};

    @AliasFor(
        annotation = RequestMapping.class
    )
    String[] produces() default {};
}
複製代碼

  參數name別名RequestMapping.name(),做用同RequestMapping.name。
  參數value別名RequestMapping.value(),做用同RequestMapping.value。
  參數path別名RequestMapping.path(),做用同RequestMapping.path。
  參數params別名RequestMapping.params(),做用同RequestMapping.params。
  參數headers別名RequestMapping.headers(),做用同RequestMapping.headers。
  參數consumes別名RequestMapping.consumes(),做用同RequestMapping.consumes。
  參數produces別名RequestMapping.produces(),做用同RequestMapping.produces。

  • @ResponseBody

  1. 含義

  該註解用於將Controller的方法返回的對象,經過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區。
  從版本4.0開始,此註釋也能夠添加到類型級別,在這種狀況下,它是繼承的,不須要在方法級別添加。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseBody {
}
複製代碼

  無參數。

  • @RequestBody

  1. 含義

  該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,而後把相應的數據綁定到要返回的對象上。
  再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。

  1. 參數

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {
    boolean required() default true;
}
複製代碼

  參數required設置body部分數據是否必需。同@Autowired.required。

  • @PathVariable

  1. 含義

  當使用@RequestMapping URI佔位符映射時,Url中能夠經過一個或多個{xxxx}佔位符映射,經過@PathVariable能夠綁定佔位符參數到方法參數中。

  1. 參數

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    boolean required() default true;
}
複製代碼

  參數value別名name,默認值爲「」。用於指定要綁定的路徑變量的名稱。value和name不能同時設置。
  參數name別名value,默認值爲「」。用於指定要綁定的路徑變量的名稱。value和name不能同時設置。
  參數required設置是否須要路徑變量。默認爲須要。

  • @RestController

  1. 含義

  組合了@Controller和@ResponseBody的註釋。
  帶有此註釋的類型被視爲控制器,其中@RequestMapping和@ResponseBody採用默認設置。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    String value() default "";
}
複製代碼

  參數value默認值爲「」,該值能夠指示對邏輯組件名稱的建議,在自動檢測的組件的狀況下將其轉換爲Spring bean。

  • @ControllerAdvice

  1. 含義

  @ControllerAdvice是一個@Component,用於定義@ExceptionHandler,@InitBinder和@ModelAttribute方法,適用於全部使用@RequestMapping方法。
  Spring4以前,@ControllerAdvice在同一調度的Servlet中協助全部控制器。Spring4已經改變:@ControllerAdvice支持配置控制器的子集,而默認的行爲仍然能夠利用。
  在Spring4中, @ControllerAdvice經過annotations(), basePackageClasses(), basePackages()方法定製用於選擇控制器子集。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ControllerAdvice {
    @AliasFor("basePackages")
    String[] value() default {};

    @AliasFor("value")
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<?>[] assignableTypes() default {};

    Class<? extends Annotation>[] annotations() default {};
}
複製代碼

  參數value別名basePackages,默認爲空的String字符串數組,表示須要加強的包的路徑數組。value和basePackages不能同時指定。
  參數basePackages別名value,默認爲空的String字符串數組,表示須要加強的包的路徑數組。value和basePackages不能同時指定。
  參數basePackageClasses是類型安全的,用於替換value指定包以選擇由@ControllerAdvice 註釋類輔助的控制器。
  參數assignableTypes表示應用中須要加強的類的數組。
  參數annotations表示應用中須要加強的註釋數組。

  • @ExceptionHandler

  1. 含義

  用於處理特定的類和/或方法中的異常的註釋。
  使用此註釋的方法容許具備靈活的簽名。它們能夠按任意順序具備如下類型的參數:

  • 異常參數:聲明爲通常異常或更具體的異常。若是註釋不經過它的value縮小異常類型,這也能夠做爲映射提示。
  • 請求和/或響應對象(一般來自Servlet API)。您能夠選擇任何特定的請求/響應類型,例如 ServletRequest/ HttpServletRequest。
  • 會話對象:一般HttpSession。此類型的參數將強制存在相應的會話。所以,這個參數永遠不會null。 請注意,會話訪問可能不是線程安全的,特別是在Servlet環境中:若是容許多個請求同時訪問會話,請考慮將"synchronizeOnSession"標誌切換爲「true」。
  • WebRequest或 NativeWebRequest。容許通用請求參數訪問以及請求/會話屬性訪問,而不與本機Servlet API綁定。
  • Locale對於當前請求區域設置(由最可用的區域設置解析程序肯定,即LocaleResolver 在Servlet環境中配置)。
  • InputStream/ Reader用於訪問請求的內容。這將是Servlet API公開的原始InputStream / Reader。
  • OutputStream/ Writer用於生成響應的內容。這將是Servlet API公開的原始OutputStream / Writer。
  • Model做爲從異常處理方法返回模型映射的替代方法。請注意,提供的模型不預先填充常規模型屬性,所以始終爲空,以便爲特定於異常的視圖準備模型。

  異常處理方法支持如下返回類型:

  • 一個ModelAndView對象(來自Servlet MVC)。
  • 一個Model對象,經過一個RequestToViewNameTranslator隱式肯定視圖名稱。
  • 一個Map用於暴露一個Model,經過一個RequestToViewNameTranslator隱式肯定視圖名稱。
  • 一個View對象。
  • 一個String值,它被解釋爲視圖名稱。
  • 帶有@ResponseBody註釋的方法(僅限Servlet)來設置響應內容。返回值將使用消息轉換器轉換爲響應流 。
  • 一個HttpEntity或 一個ResponseEntity對象(僅限Servlet)來設置響應頭和內容。ResponseEntity正文將被轉換並使用消息轉換器寫入響應流 。
  • 若是方法處理響應自己(經過直接編寫響應內容,爲此目的聲明類型爲ServletResponse / HttpServletResponse的參數)或者若是視圖名稱應該經過RequestToViewNameTranslator隱式肯定(未在此處聲明響應參數),則返回void處理程序方法簽名)。
      在Servlet環境中,您能夠將@ExceptionHandler註釋與@ResponseStatus 結合使用,以定義HTTP響應的響應狀態。
  1. 參數

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExceptionHandler {
    Class<? extends Throwable>[] value() default {};
}
複製代碼

  參數value設置註釋方法要處理的異常。

  • @ModelAttribute

  1. 含義

  將方法參數或方法返回值綁定到命名模型屬性的註釋,公開給Web視圖。支持帶@RequestMapping方法的控制器類。
  可使用特定的屬性名稱,經過註釋@RequestMapping方法的相應參數,將命令對象公開給Web視圖。
  也能夠經過使用@RequestMapping方法在控制器類中註釋訪問器方法,將引用數據公開給Web視圖。容許這樣的訪問器方法具備@RequestMapping方法支持的任何參數, 將模型屬性值返回並公開。
  但請注意,當請求處理致使異常時,Web視圖沒法使用引用數據和全部其餘模型內容,由於可能在任什麼時候候引起異常,從而使模型的內容不可靠。所以,@ ExceptionHandler方法不提供對Model參數的訪問。

  1. 參數

@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ModelAttribute {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    boolean binding() default true;
}
複製代碼

  參數value別名name,默認值爲「」,指定要綁定的model屬性的名稱。value和name不能同時指定。
  參數name別名value,默認值爲「」,指定要綁定的model屬性的名稱。value和name不能同時指定。
  參數binding設置是否容許直接在@ModelAttribute方法參數或從@ModelAttribute方法返回的屬性上聲明數據綁定,這兩種方法都會阻止該屬性的數據綁定。

  • @InitBinder

  1. 含義

  用於標識初始化WebDataBinder的方法,該方法將用於填充帶註釋的方法的命令和表單對象參數。
  這樣的init-binder方法支持RequestMapping支持的全部參數,命令/表單對象和相應的驗證結果對象除外。 Init-binder方法不能有返回值;它們一般被宣佈爲無效。
  典型的參數是WebDataBinder與WebRequest或Locale的組合,容許註冊特定於上下文的編輯器。

  1. 參數

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface InitBinder {
    String[] value() default {};
}
複製代碼

  參數value設置此init-binder方法應用於的命令/表單屬性和/或請求參數的名稱。

  • @WebAppConfiguration

  1. 含義

  @WebAppConfiguration是一個類級別註釋,用於聲明爲集成測試加載的ApplicationContext應該是WebApplicationContext。
  測試類上存在@WebAppConfiguration指示應使用Web應用程序根路徑的默認值爲測試加載WebApplicationContext。要覆蓋默認值,請經過value()屬性指定顯式資源路徑。
  請注意,@WebAppConfiguration必須與@ContextConfiguration結合使用,能夠在單個測試類中,也能夠在測試類層次結構中使用。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface WebAppConfiguration {
    String value() default "src/main/webapp";
}
複製代碼

  參數value指定Web應用程序根目錄的資源路徑。

  • @EnableAutoConfiguration

  1. 含義

  此註釋自動載入應用程序所需的全部Bean——這依賴於Spring Boot在類路徑中的查找。該註解組合了@Import註解,@Import註解導入了EnableAutoCofigurationImportSelector類,它使用SpringFactoriesLoader.loaderFactoryNames方法來掃描具備META-INF/spring.factories文件的jar包。而spring.factories裏聲明瞭有哪些自動配置。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}
複製代碼

  參數exclude指定的Configuration類不會生成bean而且不會被使用。
  參數excludeName指定的Configuration類的全路徑名稱,做用同上。

  • @SpingBootApplication

  1. 含義

  SpringBoot的核心註解,主要目的是開啓自動配置。它也是一個組合註解,主要組合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。能夠經過@SpringBootApplication(exclude={想要關閉的自動配置的類名.class})來關閉特定的自動配置。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    @AliasFor(
        annotation = EnableAutoConfiguration.class,
        attribute = "exclude"
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class,
        attribute = "excludeName"
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}
複製代碼

  參數exclude同EnableAutoConfiguration.exclude()。
  參數excludeName同EnableAutoConfiguration.exclude()。
  參數scanBasePackages同ComponentScan.basePackages()。
  參數scanBasePackageClasses同ComponentScan.basePackageClasses()。

  • @ImportResource

  1. 含義

  指示包含要導入的bean定義的一個或多個資源。
  與@Import同樣,此批註提供的功能相似於Spring XML中的元素。它一般在將@Configuration類設計爲由AnnotationConfigApplicationContext引導時使用,但仍須要某些XML功能(如命名空間)。
  默認狀況下,若是以「.groovy」結尾,將使用GroovyBeanDefinitionReader處理value()屬性的參數;不然,將使用XmlBeanDefinitionReader來解析Spring XML文件。可選地,能夠聲明reader()屬性,容許用戶選擇自定義BeanDefinitionReader實現。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
public @interface ImportResource {
    @AliasFor("locations")
    String[] value() default {};

    @AliasFor("value")
    String[] locations() default {};

    Class<? extends BeanDefinitionReader> reader() default BeanDefinitionReader.class;
}
複製代碼

  參數value別名locations,默認值爲空字符串數組。指定要導入的資源位置。
  參數locations別名value,默認值爲空字符串數組。指定要導入的資源位置。
  參數reader指定自定義的BeanDefinitionReader接口實現類來處理經過value()屬性指定的資源。

  • @ConfigurationProperties

  1. 含義

  將properties屬性與一個Bean及其屬性相關聯,從而實現類型安全的配置。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigurationProperties {
    @AliasFor("prefix")
    String value() default "";

    @AliasFor("value")
    String prefix() default "";

    boolean ignoreInvalidFields() default false;

    boolean ignoreNestedProperties() default false;

    boolean ignoreUnknownFields() default true;

    /** @deprecated */
    @Deprecated
    boolean exceptionIfInvalid() default true;
}
複製代碼

  參數value別名prefix,默認參數爲「」,用於指定配置文件中的前綴。假設配置文件內容以下:

connection.username=admin
connection.password=password
connection.remoteAddress=192.168.1.1
複製代碼

  這時候咱們能夠定義一個實體類在裝載配置文件信息

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {

    private String username;
    private String remoteAddress;
    private String password ;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getRemoteAddress() {
        return remoteAddress;
    }
    public void setRemoteAddress(String remoteAddress) {
        this.remoteAddress = remoteAddress;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}
複製代碼

  配置文件中的數據就會自動封裝到bean中。
  參數prefix別名value,效果同value。
  參數ignoreInvalidFields設置當數據類型不匹配時是否忽略。
  參數ignoreNestedProperties設置是否忽略嵌套屬性。
  參數ignoreUnknownFields設置是否忽略未知的配置屬性。
  參數exceptionIfInvalid效果同ignoreInvalidFields,已過期。

  • @ConditionalOnBean

  1. 含義

  條件註解。當容器裏有指定Bean的條件下執行方法。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnBeanCondition.class})
public @interface ConditionalOnBean {
    Class<?>[] value() default {};

    String[] type() default {};

    Class<? extends Annotation>[] annotation() default {};

    String[] name() default {};

    SearchStrategy search() default SearchStrategy.ALL;

    Class<?>[] parameterizedContainer() default {};
}
複製代碼

  參數value指定依賴的bean的class類數組。
  參數type指定依賴的bean的全路徑名稱字符串數組。
  參數annotation指定依賴的bean帶有的註釋類名。
  參數name指定依賴的bean的名稱。
  參數search決定是否應考慮應用程序上下文層次結構(父上下文)的策略。
  參數parameterizedContainer指定可能在其泛型參數中包含指定bean類型的其餘類。

  • @ConditionalOnClass

  1. 含義

  條件註解。當類路徑下有指定的類的條件下執行方法。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
> @Documented
@Conditional({OnClassCondition.class})
public @interface ConditionalOnClass {
    Class<?>[] value() default {};

    String[] name() default {};
}
複製代碼

  參數value指定必須存在的類。
  參數name指定必須存在的類名。

  • @ConditionalOnExpression

  1. 含義

  條件註解。基於SpEL表達式做爲判斷條件。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnExpressionCondition.class})
public @interface ConditionalOnExpression {
    String value() default "true";
}
複製代碼

  參數value設置用於判斷的SpEL表達式。

  • @ConditionalOnJava

  1. 含義

  條件註解。基於JVM版本做爲判斷條件。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnJavaCondition.class})
public @interface ConditionalOnJava {
    ConditionalOnJava.Range range() default ConditionalOnJava.Range.EQUAL_OR_NEWER;

    ConditionalOnJava.JavaVersion value();

    public static enum JavaVersion {
        NINE(9, "1.9", "java.security.cert.URICertStoreParameters"),
        EIGHT(8, "1.8", "java.util.function.Function"),
        SEVEN(7, "1.7", "java.nio.file.Files"),
        SIX(6, "1.6", "java.util.ServiceLoader");

        private final int value;
        private final String name;
        private final boolean available;

        private JavaVersion(int value, String name, String className) {
            this.value = value;
            this.name = name;
            this.available = ClassUtils.isPresent(className, this.getClass().getClassLoader());
        }

        public boolean isWithin(ConditionalOnJava.Range range, ConditionalOnJava.JavaVersion version) {
            Assert.notNull(range, "Range must not be null");
            Assert.notNull(version, "Version must not be null");
            switch(range) {
            case EQUAL_OR_NEWER:
                return this.value >= version.value;
            case OLDER_THAN:
                return this.value < version.value;
            default:
                throw new IllegalStateException("Unknown range " + range);
            }
        }

        public String toString() {
            return this.name;
        }

        public static ConditionalOnJava.JavaVersion getJavaVersion() {
            ConditionalOnJava.JavaVersion[] var0 = values();
            int var1 = var0.length;

            for(int var2 = 0; var2 < var1; ++var2) {
                ConditionalOnJava.JavaVersion candidate = var0[var2];
                if (candidate.available) {
                    return candidate;
                }
            }

            return SIX;
        }
    }

    public static enum Range {
        EQUAL_OR_NEWER,
        OLDER_THAN;

        private Range() {
        }
    }
}
複製代碼

  參數range配置value()中配置的值是否應被視爲上限或更低的包含邊界。
  參數value指定要檢查的JavaVersion。

  • @ConditionalOnJndi

  1. 含義

  條件註解。在JNDI存在的條件下查找指定的位置。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnJndiCondition.class})
public @interface ConditionalOnJndi {
    String[] value() default {};
}
複製代碼

  參數value指定JNDI位置,其中一個必須存在。

  • @ConditionalOnMissingBean

  1. 含義

  條件註解。當容器裏沒有指定Bean的狀況下執行方法。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnBeanCondition.class})
public @interface ConditionalOnMissingBean {
    Class<?>[] value() default {};

    String[] type() default {};

    Class<?>[] ignored() default {};

    String[] ignoredType() default {};

    Class<? extends Annotation>[] annotation() default {};

    String[] name() default {};

    SearchStrategy search() default SearchStrategy.ALL;

    Class<?>[] parameterizedContainer() default {};
}
複製代碼

  參數value指定應檢查的bean的class類型。
  參數type指定應檢查的bean的class全路徑名稱。
  參數ignored表示匹配bean時應忽略的bean的class類型。
  參數ignoredType表示匹配bean時應忽略的bean的class全路徑名稱。
  參數annotation指定應該檢查的bean的註釋類型。
  參數name表示要檢查的bean的名稱。
  參數search決定是否應考慮應用程序上下文層次結構(父上下文)的策略。
  參數parameterizedContainer指定可能在其泛型參數中包含指定bean類型的其餘類。

  • @ConditionalOnMissingClass

  1. 含義

  條件註解。當類路徑下沒有指定的類的狀況下執行方法。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnClassCondition.class})
public @interface ConditionalOnMissingClass {
    String[] value() default {};
}
複製代碼

  參數value表示不存在的類的名稱。

  • @ConditionalOnNotWebApplication

  1. 含義

  條件註解。當前項目不是web項目的條件下執行方法。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnWebApplicationCondition.class})
public @interface ConditionalOnNotWebApplication {
}
複製代碼

  無參數。

  • @ConditionalOnResource

  1. 含義

  條件註解。類路徑有指定的資源時執行方法。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnResourceCondition.class})
public @interface ConditionalOnResource {
    String[] resources() default {};
}
複製代碼

  參數resources表示必須存在的資源路徑。

  • @ConditionalOnSingleCandidate

  1. 含義

  條件註解。當指定Bean在容器中只有一個,有多個的狀況其能夠指定首選的Bean。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnBeanCondition.class})
public @interface ConditionalOnSingleCandidate {
    Class<?> value() default Object.class;

    String type() default "";

    SearchStrategy search() default SearchStrategy.ALL;
}
複製代碼

  參數value指定應檢查的bean的class類型。
  參數type指定應檢查的bean的class全路徑名稱。
  參數search決定是否應考慮應用程序上下文層次結構(父上下文)的策略。

  • @ConditionalOnWebApplication

  1. 含義

  條件註解。當前項目是web項目的狀況下執行方法。

  1. 參數

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnWebApplicationCondition.class})
public @interface ConditionalOnWebApplication {
}
複製代碼

  無參數。

  • @EnableConfigurationProperties

  1. 含義

  啓用對ConfigurationProperties帶註釋的bean的支持。ConfigurationProperties bean能夠以標準方式注入(例如使用@Bean方法),或者爲方便起見,能夠直接在此註釋上指定。

  1. 參數

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({EnableConfigurationPropertiesImportSelector.class})
public @interface EnableConfigurationProperties {
    Class<?>[] value() default {};
}
複製代碼

  參數value表示使用Spring快速注入ConfigurationProperties註釋bean。

  • @AutoConfigureAfter

  1. 含義

  在指定的自動配置類以後再配置。

  1. 參數

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface AutoConfigureAfter {
    Class<?>[] value() default {};

    String[] name() default {};
}
複製代碼

  參數value指定在此配置執行以前應該已應用的自動配置類。
  參數name指定在此配置執行以前應該已應用的自動配置類的全路徑名稱。

  • @Constraint

  1. 含義

  將註釋標記爲Bean Validation約束。
  給定的約束註釋必須被@Constraint註釋,該註釋引用其約束驗證明現的列表。
  被@Constraint標記的註釋必須包含如下屬性:

  1. String message() default [...];應該默認爲由約束的徹底限定類名後跟的錯誤消息鍵 .message。例如"{com.acme.constraints.NotSafe.message}"。
  2. Class<?>[] groups() default {}; 供用戶自定義目標組。
  3. Class<? extends Payload>[] payload() default {}; 出於可擴展性的目的。

  構建通用和交叉參數的約束時,約束註釋必須承載validationAppliesTo()屬性。若是約束是以註釋元素爲目標,則約束是通用的,若是它以方法或構造函數的參數數組爲目標,則是交叉參數。   

ConstraintTarget validationAppliesTo() default ConstraintTarget.IMPLICIT;  
複製代碼

  此屬性容許約束用戶選擇約束是否以可執行文件的返回類型或其參數數組爲目標。   若是兩種ConstraintValidator附加到約束,一個目標是ValidationTarget.ANNOTATED_ELEMENT,另外一個目標是ValidationTarget.PARAMETERS, 或者若是ConstraintValidator同時針對ANNOTATED_ELEMENT和PARAMETERS。那麼這個約束既是通用的,也是參數交叉的。
  

  1. 參數

@Documented
@Target({ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Constraint {
    Class<? extends ConstraintValidator<?, ?>>[] validatedBy();
}
複製代碼

  參數validatedBy指定一個或多個實現了ConstraintValidator接口的類來進行數據校驗。

參考文獻:

相關文章
相關標籤/搜索