偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

測(cè)試開發(fā)必須掌握的重要知識(shí)點(diǎn)-Spring的核心知識(shí)點(diǎn) -Java注解@

開發(fā) 前端
Java 注解(Annotation)又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機(jī)制。Annotation 是一個(gè)輔助類,它在 Junit、Struts、Spring 等工具框架中被廣泛使用。

由@Autowired引發(fā)對(duì)注解的思考

我們?cè)诰帉慡pring應(yīng)用時(shí),會(huì)發(fā)現(xiàn)通過(guò)@Autowired來(lái)對(duì)成員變量、方法和構(gòu)造函數(shù)進(jìn)行標(biāo)注進(jìn)而實(shí)現(xiàn)自動(dòng)裝配的工作,在IDE中點(diǎn)擊@Autowired 看其源碼會(huì)發(fā)現(xiàn)里面有更多以@開頭的東東,這就是我們今天講解的重點(diǎn)——Java注解!

  1. @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. @Documented 
  4. public @interface Autowired { 
  5.     /** 
  6.      * Declares whether the annotated dependency is required. 
  7.      * <p>Defaults to {@code true}. 
  8.      */ 
  9.     boolean required() default true

Java 注解詳解

Java 注解(Annotation)又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機(jī)制。Annotation 是一個(gè)輔助類,它在 Junit、Struts、Spring 等工具框架中被廣泛使用。Java 語(yǔ)言中的類、方法、變量、參數(shù)和包等都可以被標(biāo)注。和 Javadoc 不同,Java 標(biāo)注可以通過(guò)反射獲取標(biāo)注內(nèi)容。在編譯器生成類文件時(shí),標(biāo)注可以被嵌入到字節(jié)碼中。Java 虛擬機(jī)可以保留標(biāo)注內(nèi)容,在運(yùn)行時(shí)可以獲取到標(biāo)注內(nèi)容 。當(dāng)然它也支持自定義Java 標(biāo)注。

Java 定義了一套內(nèi)置注解,包括:

@Override - 檢查該方法是否是重寫方法。如果發(fā)現(xiàn)其父類,或者是引用的接口中并沒(méi)有該方法時(shí),會(huì)報(bào)編譯錯(cuò)誤。

@Deprecated - 標(biāo)記過(guò)時(shí)方法。如果使用該方法,會(huì)報(bào)編譯警告。

@SuppressWarnings - 指示編譯器去忽略注解中聲明的警告。

作用在其他注解的注解(或者說(shuō) 元注解)是:

@Retention - 標(biāo)識(shí)這個(gè)注解怎么保存,是只在代碼中,還是編入class文件中,或者是在運(yùn)行時(shí)可以通過(guò)反射訪問(wèn)。這3個(gè)生命周期分別對(duì)應(yīng)于:Java源文件(.java文件) ---> .class文件 ---> 內(nèi)存中的字節(jié)碼。

1、RetentionPolicy.SOURCE:注解只保留在源文件,當(dāng)Java文件編譯成class文件的時(shí)候,注解被遺棄;

2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加載class文件時(shí)候被遺棄,這是默認(rèn)的生命周期;

3、RetentionPolicy.RUNTIME:注解不僅被保存到class文件中,jvm加載class文件之后,仍然存在;

@Documented - 標(biāo)記這些注解是否包含在用戶文檔中。

@Target - 標(biāo)記這個(gè)注解的作用目標(biāo)是哪種 Java 成員。

@Target(ElementType.TYPE)——接口、類、枚舉、注解

@Target(ElementType.FIELD)——字段、枚舉的常量

@Target(ElementType.METHOD)——方法

@Target(ElementType.PARAMETER)——方法參數(shù)

@Target(ElementType.CONSTRUCTOR) ——構(gòu)造函數(shù)

@Target(ElementType.LOCAL_VARIABLE)——局部變量

@Target(ElementType.ANNOTATION_TYPE)——注解

@Target(ElementType.PACKAGE)——包

@Inherited - 標(biāo)記這個(gè)注解是繼承于哪個(gè)注解類(默認(rèn) 注解并沒(méi)有繼承于任何子類)

從 Java 7 開始,額外添加了 3 個(gè)注解:

@SafeVarargs - Java 7 開始支持,忽略任何使用參數(shù)為泛型變量的方法或構(gòu)造函數(shù)調(diào)用產(chǎn)生的警告。

@FunctionalInterface - Java 8 開始支持,標(biāo)識(shí)一個(gè)匿名函數(shù)或函數(shù)式接口。

@Repeatable - Java 8 開始支持,標(biāo)識(shí)某注解可以在同一個(gè)聲明上使用多次。

自定義注解開發(fā)

接下來(lái),我們來(lái)學(xué)習(xí)如何進(jìn)行自定義注解的開發(fā)。

使用@interface方式定義一個(gè)注解

  1. import  java.lang.annotation.Retention; 
  2. import  java.lang.annotation.Target; 
  3. import  java.lang.annotation.ElementType; 
  4. import  java.lang.annotation.RetentionPolicy; 
  5. @Retention(RetentionPolicy.RUNTIME) 
  6. @Target(ElementType.METHOD) 
  7. public @interface MyTag{ 
  8.   String name(); //注解中定義變量name 

寫一個(gè)類,在方法中應(yīng)用@MyTag

  1. public class TestTag { 
  2.      @MyTag(name="case1"
  3.      public void login(){ 
  4.          System.out.println("login"); 
  5.      } 
  6.      @MyTag(name="case2"
  7.      public void info(){ 
  8.          System.out.println("info"); 
  9.      } 
  10.      @MyTag(name="case3"
  11.      public void logout(){ 
  12.          System.out.println("logout"); 
  13.      } 
  14. }  

寫一個(gè)測(cè)試類,獲取TestTag 類login方法中的@MyTag中的name值。前面我們說(shuō)了很多注解如何定義,放在哪,現(xiàn)在我們可以開始學(xué)習(xí)注解屬性的提取了,這才是使用注解的關(guān)鍵,獲取屬性的值才是使用注解的目的。獲取注解屬性, 需要使用反射技術(shù)(我會(huì)在下面的文章中重點(diǎn)介紹反射),代碼如下:

  1. public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException { 
  2.         //裝載類并且對(duì)其進(jìn)行實(shí)例化的操作。 
  3.       Class tag = Class.forName("com.my.demo.TestTag"); 
  4.         //調(diào)用login方法(必須是public類型) 
  5.        Method m=tag.getMethod("login");  
  6.       //返回MyTag類型的注釋 
  7.         MyTag name=m.getAnnotation(MyTag.class);  
  8.         //輸出注釋的名稱 
  9.         System.out.println("value is: "+name.name());  
  10.     } 

運(yùn)行代碼,結(jié)果如下:

  1. value is: case1 

 好了,這就是Java注解的基礎(chǔ)應(yīng)用,是不是很簡(jiǎn)單呢?接下來(lái)我還會(huì)寫關(guān)于反射技術(shù),以及注解和反射技術(shù)結(jié)合應(yīng)用的文章,也希望大家持續(xù)關(guān)注。

 

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2021-04-07 07:48:00

測(cè)試開發(fā)Java反射Spring

2020-11-06 00:50:16

JavaClassLoaderJVM

2025-01-07 14:10:46

SpringBoot開發(fā)Java

2021-01-15 08:35:49

Zookeeper

2020-10-26 10:40:31

Axios前端攔截器

2021-12-30 08:17:27

Springboot數(shù)據(jù)訪問(wèn)DataSourceB

2016-12-21 09:55:55

面試JavaScrip總結(jié)

2016-05-30 17:31:34

Spring框架

2024-06-04 14:07:00

2024-11-04 09:00:00

Java開發(fā)

2021-01-06 13:52:19

zookeeper開源分布式

2020-05-19 14:40:08

Linux互聯(lián)網(wǎng)核心

2022-04-08 07:51:31

JavaJVM垃圾回收

2025-03-26 11:30:40

2021-05-17 06:02:58

Css前端CSS 特效

2020-10-14 10:50:50

SpringSessiJavaweb

2024-04-23 14:25:16

Python備忘清單

2025-05-13 08:10:00

MySQL二進(jìn)制日志binlog

2019-10-24 09:09:28

MySQLACIDJava

2024-09-19 16:00:01

網(wǎng)絡(luò)編程網(wǎng)絡(luò)Python
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)