天天看點

注解小tips1.概述2. 注解,優化BaseDao的代碼

目錄

1.概述

自定義注解

a. 注解基本寫法

b.帶預設值的注解

c.預設名稱的注解

元注解

注解反射

2. 注解,優化BaseDao的代碼

1.概述

注解與注釋,

         注解,告訴編譯器如何運作程式!

         注釋, 給程式員閱讀,對編譯、運作沒有影響;

注解作用,

         1. 告訴編譯器如何運作程式;

         2. 簡化(取代)配置檔案   【需自己找,看案例】

常用的注解,

//重寫父類的方法
@Override
public String toString(){
    return super.toString();
}

// 抑制編譯器警告
@SuppressWarnings({"unused","unchecked"})
private void save() {
    List list = null;
}
   
// 标記方法以及過時
@Deprecated
private void save1() {

}
           

自定義注解

通過自定義注解,可以給類、字段、方法上添加描述資訊!

a. 注解基本寫法

/**
 * 自定義注解  (描述一個作者)
 * @author Jie.Yuan
 *
 */
public @interface Author {
 
   /**
    * 注解屬性
    *   1. 修飾為預設或public
    *    2. 不能有主體
    */
   String name();
   int age();
}

===============================================

//使用
@Author(name = "Jet", age = 30)
public void save() {

}
           

b.帶預設值的注解

public @interface Author {
 
   /**
    * 注解屬性
    *   1. 修飾為預設或public
    *   2. 不能有主體
    */
   String name();
   int age() default 30;   // 帶預設值的注解;  使用的時候就可以不寫此屬性值
}
           

c.預設名稱的注解

注解屬性名稱為value,這就是預設名稱

public @interface Author {
   // 如果注解名稱為value,使用時候可以省略名稱,直接給值
   // (且注解隻有一個屬性時候才可以省略名稱)
   String value();
}

==================================================

//使用
@Author("Jet")

//或者
//@Author(value = "Jet")
           

元注解

元注解,表示注解的注解!

指定注解的可用範圍:

@Target({

       TYPE,     類

       FIELD,     字段

       METHOD,  方法

       PARAMETER,   參數

       CONSTRUCTOR, 構造器

       LOCAL_VARIABLE  局部變量

})

// 元注解 - 2. 指定注解的聲明周期

@Retention(RetentionPolicy.SOURCE)    注解隻在源碼級别有效

@Retention(RetentionPolicy.CLASS)      注解在位元組碼即别有效  預設值

@Retention(RetentionPolicy.RUNTIME)   注解在運作時期有效

注解反射

@Id
@Author(remark = "儲存資訊!!!", age = 19)
public void save() throws Exception {
    // 擷取注解資訊: name/age/remark
       
       
    // 1. 先擷取代表方法的Method類型;
    Class clazz = App_2.class;
    Method m = clazz.getMethod("save");
       
    // 2. 再擷取方法上的注解
    Author author = m.getAnnotation(Author.class);
    // 擷取輸出注解資訊
    System.out.println(author.authorName());
    System.out.println(author.age());
    System.out.println(author.remark());
}
           

2. 注解,優化BaseDao的代碼

當資料庫表名與類名不一緻、 字段與屬性不一樣、主鍵不叫id, 上面的BaseDao不能用!

這時,可以通過配置檔案(XML) 解決!

注解:

簡化XML配置, 程式處理非常友善!

(不便于維護: 例如修改字段名,要重新編譯!)

XML 便于維護!  需要些讀取代碼!