日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java元注解

發(fā)布時間:2025/4/5 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java元注解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

元注解

元注解時定義注解的注解,是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方式,需要添加如下依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

1.創(chuàng)建自定義注解類

MyTestAnnotation.java
代碼解釋

  • 使用@Target注解標(biāo)注作用范圍
  • 使用@Retention注解標(biāo)注生命周期
  • 使用@Documented將注解信息添加在Java文檔中
package com.example.demo; import org.springframework.stereotype.Component; import java.lang.annotation.*;@Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Componentpublic @interface MyTestAnnotation {String value(); }

2.實現(xiàn)業(yè)務(wù)邏輯
以AOP方式實現(xiàn)業(yè)務(wù)邏輯
TestAnnotationAspect.java

package com.example.demo;import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.aspectj.lang.reflect.MethodSignature; import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; import org.springframework.stereotype.Component;import java.lang.invoke.MethodHandle; import java.lang.reflect.Method; @Aspect @Componentpublic class TestAnnotationAspect {//攔截被MyTestAnnotation注解的方法;如果需要攔截指定包指定規(guī)則名稱的方法,則可以使用表達(dá)式execution(...)@Pointcut("@annotation(com.example.demo.MyTestAnnotation)")public void myAnnotationPointCut(){}@Before("myAnnotationPointCut()")public void before(JoinPoint joinPoint)throws Throwable{MethodSignature sign=(MethodSignature) joinPoint.getSignature();Method method=sign.getMethod();MyTestAnnotation annotation=method.getAnnotation(MyTestAnnotation.class);//獲取注解參數(shù)System.out.println("TestAnnotation 參數(shù): "+annotation.value());} }

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é)

以上是生活随笔為你收集整理的Java元注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。