cmd

          ejb3 學習第一篇 annotation

          ejb3是javaee5的標準,他吸收了開源框架的許多優點,非常希望大家學習并應用到實際應用當中。
          ejb3完全是構建于annotation之上的,我將分為幾篇討論。

          這篇是自己關于注解的理解筆記

          先從RetentionPolicy這個開始把,RetentionPolicy是一個枚舉,他是對于編譯器的一個聲明。
          然而Annotations在編譯的過程會中記錄到類文件。
          RetentionPolicy的枚舉成員一共有三個
          SOURCE 編譯器要丟棄的注釋。
          CLASS 編譯器將把注釋記錄在類文件中,但在運行時 VM 不需要保留注釋。
          RUNTIME 編譯器將把注釋記錄在類文件中,在運行時 VM 將保留注釋,因此可以反射性地讀取。(激發注解在運行時生效)
          ----在這里注意一下java.lang.reflect.AnnotatedElement這個接口主要定義了獲得注解和判斷注解是否描述了某個java元素。

          在說一下這兩個
          Retention,Target (jdk提供的注解)

          示例
          Target 源碼:
          @Documented
          @Retention(RetentionPolicy.RUNTIME)
          @Target(ElementType.ANNOTATION_TYPE)
          public @interface Target {
          ??? ElementType[] value();
          }

          說明:
          ????? 1.自己可以描述自己,ElementType 描述聲明類型(該注解可以用于哪些元素上邊)。
          ????? 2.這個注解是用來描述自己定義的元數據,也應該叫做元注解,然而我們定義的元數據通常是為類或者方法而聲明的。
          ?????
          3.@Retention(RetentionPolicy.RUNTIME )用來保證在java運行時運行注解。

          其實注解就是變向的簡化java的反射以及把spring等容器ioc和aop的相關概念從往常的xml作為元數據提了一個高度聲明至類中,摒棄掉了項目 擴大時冗長的xml的配置。

          一般通過類或者方法的反射調用注解的方式如下
          ??????????? for (Method m : Class.forName(className).getMethods()) {
          ?????????????? if (m.isAnnotationPresent(MyAnnotation.class)) {
          ????????????????? try {
          ???????????????????? m.invoke(null);//根據方法有無參數設置是否為null
          ????????????????? } catch (Throwable ex) {
          ???????????????????? System.out.printf("失敗");
          ????????????????? }
          ?????????????? }

          概念上應注意的幾點:
          1.在Annotation中,沒有默認值的成員必須有一個成員值。而如何理解默認值是如何被處理就是一個很重要的細節:annotation類型所定義的

          成員默認值被存儲在class文件中,不被編譯到annotation里面。如果我們修改一個annotation類型使其成員的默認值發生了改變,這個改變對 于所有此類型的annotation中沒有明確提供成員值的成員產生影響(即修改了該成員的成員值)。即使在annotation類型使其成員的默認值被 改變后annotation從沒被重新編譯過,該類型的annotation(改變前已經被編譯的)也受到影響。

          這篇基本先寫到這里,java元數據其實是很大的一塊,我只是粗略的看了一下基本的概念,用來學習ejb作一個鋪墊。關于annotation的詳情介 紹可以閱讀參考文獻中的兩篇文章。在下一章中我要介紹一下ejb中常用的annotation。

          參考文獻:
          ?? jdk源碼
          ?? Java Annotation入門
          http://www.matrix.org.cn/resource/article/44/44048_Java+Annotation.html
          ???Java Annotation手冊 http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html

          posted on 2006-08-13 23:14 靜夜思 閱讀(1760) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 方城县| 南京市| 凉城县| 昆山市| 灵丘县| 海安县| 施秉县| 任丘市| 兴宁市| 灵璧县| 上蔡县| 九龙县| 中江县| 巫山县| 龙川县| 涡阳县| 肇州县| 中阳县| 博野县| 东方市| 凤冈县| 抚远县| 类乌齐县| 宜宾市| 安义县| 黑河市| 谢通门县| 巢湖市| 普安县| 苍南县| 锦屏县| 长治市| 望江县| 崇左市| 华阴市| 通渭县| 哈巴河县| 双江| 密山市| 崇明县| 伊金霍洛旗|