JavaEE中一些不大經常使用,可是具備特點功能的註解【持續整理】

什麼是註解


註解(Annotation)至關於一種標記,在程序中加入註解就等於爲程序打上某種標記,就去幹相應的事,標記能夠加在包、類,屬性、方法,方法的參數以及局部變量上。java

註解的簡單應用

註解類

@interface A {

}

應用註解類

@A
class B {

	@A
	String field;

	@A
	void method(){

	}
}

小結

註解能夠加在類、成員變量、成員方法上。web

註解是JDK1.5以後才提供的特性,三個常見註解:spring

  • @Deprecated 意思是「廢棄的,過期的」
  • @Override 意思是「重寫、覆蓋」
  • @SuppressWarnings 意思是「壓縮警告」

元註解


首先解釋一下什麼是元註解,元註解就是註解註解的註解。數據庫

提及來有點拗口,能夠這樣理解,看下面的例子:服務器

/**
 * 這是一個自定義的註解(Annotation)類 在定義註解(Annotation)類時使用了另外一個註解類Retention
 * 在註解類上使用另外一個註解類,那麼被使用的註解類就稱爲元註解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
public @interface MyAnnotation {
}

這是咱們自定義的註解MyAnnotation,在咱們自定義的註解註解類中,咱們使用了這兩個註解@Retention@Target,這兩個註解就是元註解——註解(動詞)註解(註解類)的註解(名詞)。websocket

J2SE5.0版本在 java.lang.annotation提供了四種元註解,專門註解其餘的註解:session

  • @Documented –註解是否將包含在JavaDoc中
  • @Retention –何時使用該註解
  • @Target? –註解用於什麼地方
  • @Inherited – 是否容許子類繼承該註解

@Documented元註解

app

@Retention元註解

首先看一下帶有註解的Java的執行過程,分爲下面三個階段異步

  1. Java源程序上加了一個註解
  2. Java源程序要由javac去編譯,把源文件編譯成.class文件
  3. 運行編譯好的class文件 這三個階段就是Java-->class-->字節碼的過程

這個@Retention元註解就是表示註解的生命週期的,他有三個屬性值socket

  • RetentionPolicy.SOURCE階段(java源文件階段)
  • RetentionPolicy.CLASS階段(class文件階段)
  • RetentionPolicy.RUNTIME階段(內存中的字節碼運行時階段)

@Target元註解

@Target元註解決定了一個註解能夠標識到哪些成分上,如標識在在類身上,或者屬性身上,或者方法身上等成分,@Target默認值爲任何元素

@Inherited元註解


javax下的註解

@PostConstruct

用來修飾一個非靜態的void()方法.並且這個方法不能有拋出異常聲明。

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

@PreDestroy

用來修飾一個非靜態的void()方法.並且這個方法不能有拋出異常聲明。

被@PreDestroy修飾的方法會在服務器卸載Servlet的時候運行,而且只會被服務器調用一次,相似於Servlet的destroy()方法。被@PreDestroy修飾的方法會在destroy()方法以後運行,在Servlet被完全卸載以前。

@WebListener

該註解用於監聽器

監聽器類應該實現下面接口之一:

  1. 對Request的監聽有ServletRequestListener和ServletRequestAttributeListener。

    • 前者可見監聽Request的建立和銷燬;
    • 然後者能夠對Request的屬性進行監聽。
  2. 對Session的監聽有HttpSessionListener和HttpSessionAttributeListener。

    • 前者能夠監聽HttpSession的建立跟銷燬,
    • 後者則是對session中屬性的監聽。
  3. 對於ServletContext的監聽器有ServletContextListener和ServletContextAttributeListener。

    • 前者能夠監聽到ServletContext的建立和銷燬,
    • 後者能夠監聽到ServletContext中屬性的監聽。

@MappedSuperclass

JPA環境下中使用

  1. @MappedSuperclass註解用在實體類的父類上
  2. @MappedSuperclass標識的類表示其不能映射到數據庫表,由於其不是一個完整的實體類,可是它所擁有的屬性可以讓繼承其的子類映射到數據庫表中
  3. @MappedSuperclass標識得類不能再有@Entity或@Table註解

@Inheritance

註解標註在父類上不會被子類所繼承 我也僅僅是會用,說的不是太明白


Spring提供的註解

@Component

  • spring做用在類上的註解有@Component@Responsity@Service以及@Controller
  • 當註解做用在類上時,代表這些類是交給spring容器進行管理的,而用@Autowired@Resource引入該類對象時,並不須要我本身去new一個,spring容器會自動的將我須要對象創造出來。這就是一般所說的依賴注入和控制反轉。

泛指組件,當組件很差歸類的時候,咱們可使用這個註解進行標註。通常公共的方法我會用上這個註解

@EnableScheduling和@Scheduled

@Scheduled註解是Spring提供的定時任務調度的註解,該註解註解在方法上,可定義cron表達式定時執行,也可自定義延時時間執行

在使用@Scheduled註解的時候,要確保已經開啓Spring此功能,開啓此功能只須要將@EnableScheduling註解到啓動類上便可

@NoRepositoryBean

在使用spring data jpa的時候,每一個實體類有須要實現的相同的方法,就能夠單獨抽取出來,放在一個公共的接口MyRepository中,並這個類繼承了jpa的相關Repository接口或類,由MyRepository接口來銜接jpa的相關操做,其餘實體類須要實現的操做就直接繼承MyRepository接口,不用每次都去繼承jpa的相關接口或類啦,因此這個公共接口就須要這個註解@NoRepositoryBean來標識。

@Repository

Dao層的註解,若是繼承了相關的Repository或者配置了bean寫不寫均可以

@EnableWebSocketMessageBroker

@EnableWebSocketMessageBroker註解用於開啓使用STOMP協議來傳輸基於代理(MessageBroker)的消息,這時候控制器(controller)開始支持@MessageMapping,就像是使用@requestMapping同樣。

@EnableJms

註解@EnableJms設置在@Configuration類上,用來聲明對 JMS 註解的支持。

@EnableAsyncx

註解在配置類上, 開始異步任務支持

@Async

註解在類或者方法上, 來聲明一個異步任務

@Order

定義Spring容器加載Bean的順序

@ServerEndpoint

websocket的@RequestMapping


Swagger提供的註解

@EnableSwagger2

@Api

用於類;表示標識這個類是swagger的資源

  • [tags] – 表示說明
  • [value] – 也是說明,可使用tags替代 可是tags若是有多個值,會生成多個list

@ApiOperation()

用於方法;表示一個http請求的操做

  • [value] - 用於方法描述
  • [notes] - 用於提示內容
  • [tags] - 能夠從新分組(視狀況而用)

@ApiParam()

用於方法,參數,字段說明;表示對參數的添加元數據(說明或是否必填等)

  • [name] – 參數名
  • [value] – 參數說明
  • [required] – 是否必填

@ApiModel()

用於類 ;表示對類進行說明,用於參數用實體類接收

  • [value] – 表示對象名
  • [description] – 描述

均可省略

@ApiModelProperty()

用於方法,字段; 表示對model屬性的說明或者數據操做更改

  • [value] – 字段說明
  • [name] – 重寫屬性名字
  • [dataType] – 重寫屬性類型
  • [required] – 是否必填
  • [example] – 舉例說明
  • [hidden] – 隱藏

@ApiIgnore()

用於類或者方法上,能夠不被swagger顯示在頁面上

@ApiImplicitParam()

用於方法 表示單獨的請求參數

@ApiImplicitParams()

用於方法,包含多個 @ApiImplicitParam

  • [name] – 參數ming
  • [value] – 參數說明
  • [dataType] – 數據類型
  • [paramType] – 參數類型
  • [example] – 舉例說明
相關文章
相關標籤/搜索