Java元注解
元注解
元注解時定義注解的注解,是Java提供的用于定義注解的基本注解
| @Retention | 是注解類,實現(xiàn)聲明類Class,聲明類別Category,聲明擴(kuò)展Extension |
| @Target | 放在自定義注解上的上邊,表明該注解可以使用的范圍 |
| @Inherited | 允許子類繼承父類的注解,在子類中可以獲取使用父類注解 |
| @Documented | 表明這個注解是由Javadoc記錄的 |
| @interface | 用來定義注釋類型 |
1.@Target
該注解的作用是告訴Java將自定義的注解放在什么地方,比如類、方法、構(gòu)造器、變量上等。它的值是一個枚舉類型,有如下屬性值。
| ElementType.CONSTUCTOR | 用于描述構(gòu)造器 |
| ElementType.FIELD | 用于描述成員變量、對象、屬性(包括enum實例) |
| ElementType.LOCAL_VARIABLE | 用于描述局部變量 |
| ElementType.METHOD | 用于描述方法 |
| ElementType.PACKAGE | 用于描述包 |
| ElementType.PARAMETER | 用于描述參數(shù) |
| ElementType.TYPE | 用于描述類、接口(包括注解類型)或enum聲明 |
2.@Retention
該注解用于說明自定義注解的生命周期,在注解中有三個生命周期
| RententionPolicy.RUNTIME | 始終不會丟棄,運行期也保留該注解,可以使用發(fā)射機(jī)制讀取該注解的信息。自定義的注解通常使用這種方法 |
| RetentionPolicy.CLASS | 類加載時丟棄,默認(rèn)是這種方式 |
| RetentionPolicy.SOURCE | 編譯階段丟棄,自定義注解在編譯結(jié)束之后就不在有意義,所以它們不會寫入字節(jié)碼。@Override和@SuppressWarnings都屬于這類注解 |
3.@Inherited
該注解是一個標(biāo)記注解,表明被標(biāo)注的類型是可以被繼承的。如果一個使用了@Inherited修飾的Annotation類型被用于一個Class,則這個Annotation將被用于該Class的子類。
4.Documented
該注解表示是否將注解信息添加在Java文檔中
5 @Interface
該注解用來聲明一個注解,其中的每一個方法實際上是聲明了一個配置參數(shù)。方法的名稱就是參數(shù)的名稱,返回值類型就是參數(shù)的類型。可以通過default來聲明參數(shù)的默認(rèn)值。
定義注解格式
public @interface 注解名 {定義體}自定義注解
實驗結(jié)果:打開網(wǎng)址,網(wǎng)頁內(nèi)容為空
http://localhost:8080/lishizheng控制臺輸出如下結(jié)果
TestAnnotation 參數(shù): 測試Annotation參數(shù) 測試自定義注解項目結(jié)構(gòu)
0添加依賴
pom.xml
由于使用AOP方式,需要添加如下依賴
1.創(chuàng)建自定義注解類
MyTestAnnotation.java
代碼解釋
- 使用@Target注解標(biāo)注作用范圍
- 使用@Retention注解標(biāo)注生命周期
- 使用@Documented將注解信息添加在Java文檔中
2.實現(xiàn)業(yè)務(wù)邏輯
以AOP方式實現(xiàn)業(yè)務(wù)邏輯
TestAnnotationAspect.java
3.使用自定義注解
在需要使用的地方使用自定義注解,直接添加注解名
TestController.java
package com.example.demo; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList; import java.util.List;@RestController @EnableAspectJAutoProxypublic class TestController {@RequestMapping("/lishizheng")@MyTestAnnotation("測試Annotation參數(shù)")public void testAnnnotation(){System.out.println("測試自定義注解");}}總結(jié)
- 上一篇: SpringBoot中过滤器和监听器
- 下一篇: Eclipse无法找到Java EE T