註解

1.什麼是註解?

1. jdk1.5之後出現的,不是註釋。 
2. 註釋是程序員寫的,程序員看註釋幫助理解程序代碼。  註解是給程序看的。描述程序如何運行的以及在什麼階段運行的。(源代碼階段,編譯階段,運行階段)
3. 註解相當於一種標記,看見一個註解就知道要做什麼事。在程序中使用反射來解釋註解是幹什麼的。
4. 註解可以添加類,包,變量,方法等等上  (@Test給方法添加註解)

2.註解的作用?

2.1 編寫文檔。
2.2 代碼分析(使用反射來解釋註解)
2.3 編譯檢查(@Override)進行基本的編譯檢查。

3.常見的註解?
3.1 @Override 重寫(父類與子類之間的關係) 額外:@Overload重載(體現的多態性)
3.2 @Deprecated 類或者方法已經過時
3.3 @SupperWarings 排除相關警告

4.註解的聲明

聲明的註解格式: 註解的關鍵字 @interface

@Retention
@Target
訪問權限  @interface  註解名{
   可以聲明的類型有    基本類型,String,枚舉類型,Class類型,
   示例: public String name();
}

查看註解的本質: 首先反編譯class文件  ,執行命令javap -c  class文件
結果:
Compiled from "MyAnnotation.java"
public interface com.sky.anntotation.MyAnnotation extends java.lang.annotation.Annotation {
}
本質是一個接口,父類是Annotation.

備註:一個註解必須聲明在什麼階段可用,以及可以用在什麼地方。

5.註解的相關方法

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)  判斷指定filed或者method或者類等等。。。上是否有指定的註解
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)  獲取指定filed或者method或者類等上的指定註解
 public Annotation[] getAnnotations() :獲取指定filed或者method或者類等上的所有註解

6.註解的分類(4個)

5.1@Retention該註解可以運行在那個階段(值:SOURCE,CLASS,RUNTIME)
        5.1.1 SOURCE:表示註解只在源代碼階段有用,在編譯階段之後直接拋棄。
        5.1.2 CLASS:註解在class中可以用,但是在vm中被拋棄。
        5.1.3 RUNTIME:在VM運行階段保留註解。因此通過反射讀取註解的信息。
5.2@Target表示該註解可以用在什麼地方(構造方法,局部變量,方法,包,參數等等。。。。)
5.3 @Documented 將註解包含到doc中
       執行命令(切換目錄到指定類的位置): javadoc -d doc  類名.java    (該類中使用了註解)
5.4 @Inerited  允許子類可以繼承父類的註解

7.反射和註解的關係?

解釋: 如果註解要具有一定意義的功能,必須使用反射來解析,給指定註解注入不同的功能。

1. 如果某一個註解具有賦值功能,肯定是反射獲取到指定變量,調用了f.set(obj,value)去賦值。
2. 如果是某個方法具有一定功能,肯定是反射獲取到指定方法,調用method.invoke(obj,obj)進行方法調用

    1和2做法基本都是框架完成,已經封裝好,所以咱們第三階段使用註解直接用了
  例如:  @transactionManager    數據庫框架階段直接使用註解就完成了事務處理。
      大公司框架都是自己封裝的。小公司直接用大公司發佈的開源的,複製粘帖。

7.tomcat中servlet,filter,listener三個使用註解如何完成?
servlet規範中2.5之前使用web.xml進行註冊
servlet3.0之後直接使用註解自動註冊,不需要web.xml

  Serlvet註解註冊: 
        方式一:@WebServlet("/aa")  servlet一個映射地址
        方式二:@WebServlet(name="ServletDemo01",urlPatterns={"/cc","/bb"})                    servlet多個映射地址
    Listener註解註冊:@WebListener
    Filter註解註冊:@WebFilter("/*")

使用註解註冊:
      優點:開發效率高(代碼少)
      缺點:硬編碼(修改困難)
使用web.xml註冊:
      優點:可配置,解耦合
      缺點:不直觀,效率低
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章