1. 程式人生 > >Java --Annotation學習心得體會及筆記

Java --Annotation學習心得體會及筆記

jdb 數據信息 mysql 名稱 pub views 相對 spa pack

相對於註釋這種給程序員看的信息;
註解,就是給程序看的解釋性的語言,其作用就相當於配置文件的存在。其存在的意義在於以下幾點:

優點:

  • 方便的使程序員看到相關項的關聯位置及關聯方式等信息。
    缺點:

  • 由於註解是存在於程序之上的,所以每次對註解進行修改後就必須要對源代碼進行重新編譯才會生效。


註解都長什麽樣呢?


在使用Eclipse編程的時候我們會經常看到下面幾種:

  • @Override——覆蓋父類的方法
  • @SupportWarning——抑制警告
  • @Deprecated——過時的
    大致的使用方法,我從網上download下來一幅圖片,基本上可以講述這些常用的註解的作用及使用方式。如下:
    技術分享圖片

    但是光有自帶的這些註解可是遠遠不夠滴。我們還需要開發出自定義的實現相關需求的註解。這樣才能應付復雜的實際的開發環境。

怎麽開發自定義註解?


開發一個自定義註解並不是很復雜,只要按照一定的約束和規範,就可以實現自定義的註解的開發。實現的步驟如下:

  • 使用@interface關鍵字修飾註解名稱
  • 聲明符合要求的屬性及字段
  • 使用元註解對自定義的註解進行約束和規範(尤其需要使用@Retention,來約束自定義註解的有效的Scope,一般是RetentionPolicy.RUNTIME這樣我們才可以在代碼編譯完成及運行的時候捕捉到註解上面存在的數據信息)。

對於元註解一般有如下的幾個:
- @Retention:可以通俗的理解為註解持有的域的範圍
- @Target:理解為註解存在的位置
- @Document:加上這個註解的註解就會被收錄到Javadoc工具上
- @Inherited:加上這個註解就會使得自定義的註解可以被繼承

上面的元註解中最為常用也最為重要的是@Retention和@Target兩個圓元註解,同樣在網上下載了一張圖,可以很好地解釋相關項的含義及作用。技術分享圖片


使用註解開發出一個數據庫連接小助手註解


首先我們需要明白的是數據庫連接需要的是驅動,資源定位,用戶名和密碼四個“屬性”,所以我們的自定義註解就需要有這四個屬性。如下:

package annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//這裏是最為關鍵的一點,尤其需要註意註解的存在域的範圍
@Retention
(RetentionPolicy.RUNTIME) public @interface JdbcAnnotation { String driver(); String url(); String username(); String password(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

然後我們就可以在程序中引用自定義的註解了。如下:

package annotation;

import java.lang.reflect.Method;
import java.sql.Connection;

import org.junit.Test;

public class JDBCUtils {


    @JdbcAnnotation(driver="com.mysql.jdbc.Driver",url="jdbc:mysql://localhost:3306/myDb",username="root",password="mysql")
    public static Connection getConnection() throws Exception {
        Method method = JDBCUtils.class.getDeclaredMethod("getConnection", null);
        JdbcAnnotation ja = method.getAnnotation(JdbcAnnotation.class);
        String driver = ja.driver();
        String url = ja.url();
        String username = ja.username();
        String password = ja.password();


        System.out.println("數據庫連接驅動:"+driver);
        System.out.println("數據庫連接資源定位:"+url);
        System.out.println("數據庫連接用戶名:"+username);
        System.out.println("數據庫連接密碼:"+password);
        return null;
    }

    @Test
    public void test() throws Exception {
        getConnection();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

實現的原理是:使用反射技術,獲取註解信息,然後解析註解的內容並用相關的變量進行保存,然後就可以被其他的代碼得到運用。比如調用實際開發中的數據庫連接幫助類的相關方法,實現相關的業務邏輯。在這裏僅僅是為了顯示可以從註解上獲得我們想要的信息,即可。


程序的運行結果如下所示:

數據庫連接驅動:com.mysql.jdbc.Driver
數據庫連接資源定位:jdbc:mysql://localhost:3306/myDb
數據庫連接用戶名:root
數據庫連接密碼:mysql
  • 1
  • 2
  • 3
  • 4
  • 5

總結


使用自定義的註解技術,我們可以簡化開發過程中來回切換任務,也可以較好的對代碼進行相關項的維護,方便的處理業務邏輯。但是不容置疑的是其做完修改後要對源代碼進行編譯,這在一定程度上限制了註解的使用。

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

Java --Annotation學習心得體會及筆記