目錄
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 便于維護! 需要些讀取代碼!