5.注解

1.注解的概念
Annotation
注解:給程序帶上一些標(biāo)記,從而影響編譯器運(yùn)行程序的結(jié)果?。?!
注釋:提高程序的可讀性,對程序運(yùn)行沒有影響!??!
注解的作用:
    1)可以在程序上(類,方法,屬性)攜帶信息
    2)注解簡化(取代)配置文件(xml或properties)
每個(gè)框架都有兩種方案:
    1)把參數(shù)放在xml文件中
        2)把參數(shù)放在注解中
2.常見的注解
/**
 * 1)告訴編譯器強(qiáng)制對方法進(jìn)行覆蓋
 */
    @Override
    public String toString() {
        return super.toString();
    }
    /**
     * 2)告訴編譯器壓制代碼中出現(xiàn)的警告
     * @return
     */
    @SuppressWarnings(value = { "unchecked" })
    public List save(){
        List list = new ArrayList();
        return list;
    }
    /**
     * 3)在運(yùn)行時(shí)讓方法提示過期
     */
    @Deprecated
    public void update(){
    }
3.定義注解語法
public @interface Author {
}
4.帶有屬性的注解
public @interface Author {
    //聲明屬性
    String name();
    String modifyTime();
}
5.注解注意的細(xì)節(jié):
5.2 注解細(xì)節(jié)
    1)屬性的類型可以基本數(shù)據(jù)類型。也可以是數(shù)組類型
    2)使用default關(guān)鍵子給注解一個(gè)默認(rèn)值
    3)當(dāng)注解中使用value名稱的屬性,則可以省略“value=”不寫      
public @interface Author {

    //聲明屬性
    String name();
    String modifyTime() default "2015-06-25";//給屬性帶上默認(rèn)值
    String[] address();//帶有數(shù)組類型的屬性
    //如果注解的屬性名稱為value,那么在使用注解的時(shí)候可以不寫value=
    String[] value();
    //String[] names();
    //String value();
}
5.元注解的概念(在注解里面在加上注解)
5.3 元注解
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
聲明注解的使用范圍.
TYPE: 注解可以用在類上
FIELD:注解可以用在屬性上
METHOD:用在方法上
PARAMETER:用在參數(shù)聲明上面
CONSTRUCTOR:用在構(gòu)造方法上面
LOCAL_VARIABLE:用在本地變量上面

@Retention(RetentionPolicy.SOURCE)
聲明注解的有效范圍
RetentionPolicy.SOURCE: 該注解只在源碼中有效!
RetentionPolicy.CLASS:  該注解在源碼中,和字節(jié)碼中有效!(默認(rèn))
RetentionPolicy.RUNTIME: 該注解在源碼中,和字節(jié)碼中有效,運(yùn)行字節(jié)碼的時(shí)候有效!
6.反射注解
使用反射技術(shù)獲?。?,方法,屬性)注解的信息
//1)得到save方法對象
Method m = this.getClass().getMethod("save", null);
//2)得到方法上面的注解
Author author = m.getAnnotation(Author.class);
System.out.println(author);
//3)獲取注解里面的屬性(數(shù)據(jù))
String name = author.name();
String time = author.modifyTime();
System.out.println(name);
System.out.println(time);
7.反射注解的案例(重點(diǎn))
改造泛型DAO的案例:
問題: 當(dāng)具體的實(shí)體類對象的屬性和表的字段不一致時(shí),BaseDao就無法使用了??!這時(shí)需要使用注解綁定類和表名,屬性和字段的關(guān)系。改造后的實(shí)體對象如下
8.反射注解的實(shí)現(xiàn)代碼
/**
 * 表的注解
 * @author APPle
 *
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
    String name();//數(shù)據(jù)的表名
}

/**
 * 字段的注解
 * @author APPle
 *
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    String name();//字段名稱
}


@Table(name = "teacher_list")
public class Teacher {
    
    @Column(name = "tid")
    private int id;
    
    @Column(name = "tname")
    private String name;
    
    @Column(name = "tage")
    private int age;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Teacher [age=" + age + ", id=" + id + ", name=" + name + "]";
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 長這么大,最喜歡的事情就是坐在汽車上戴著耳機(jī)坐在靠窗的位置聽著悠悠的旋律伴著此情此景的心情去感受我心里出現(xiàn)的畫...
    楓樂spring閱讀 615評論 0 2
  • 1 你曾是如風(fēng)的少年 我曾是如花的姑娘 風(fēng)吹花落落花隨風(fēng)今非昨 2 我精心設(shè)計(jì)了一款尋寶游戲 你循著指令找了大半個(gè)...
    Crazy麻麻閱讀 475評論 12 15

友情鏈接更多精彩內(nèi)容