cmd

          ejb3 學(xué)習第一篇 annotation

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

          這篇是自己關(guān)于注解的理解筆記

          先從RetentionPolicy這個開始把,RetentionPolicy是一個枚舉,他是對于編譯器的一個聲明。
          然而Annotations在編譯的過程會中記錄到類文件。
          RetentionPolicy的枚舉成員一共有三個
          SOURCE 編譯器要丟棄的注釋。
          CLASS 編譯器將把注釋記錄在類文件中,但在運行時 VM 不需要保留注釋。
          RUNTIME 編譯器將把注釋記錄在類文件中,在運行時 VM 將保留注釋,因此可以反射性地讀取。(激發(fā)注解在運行時生效)
          ----在這里注意一下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.這個注解是用來描述自己定義的元數(shù)據(jù),也應(yīng)該叫做元注解,然而我們定義的元數(shù)據(jù)通常是為類或者方法而聲明的。
          ?????
          3.@Retention(RetentionPolicy.RUNTIME )用來保證在java運行時運行注解。

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

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

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

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

          這篇基本先寫到這里,java元數(shù)據(jù)其實是很大的一塊,我只是粗略的看了一下基本的概念,用來學(xué)習ejb作一個鋪墊。關(guān)于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)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 类乌齐县| 成都市| 福州市| 佛冈县| 泰顺县| 静乐县| 乐至县| 隆林| 金阳县| 饶阳县| 遵义县| 日喀则市| 英超| 肥乡县| 招远市| 五河县| 响水县| 镇江市| 阿图什市| 青铜峡市| 甘泉县| 南漳县| 西乌珠穆沁旗| 会东县| 平顶山市| 黄山市| 宁明县| 奉节县| 平潭县| 鄂伦春自治旗| 海安县| 南阳市| 定边县| 静宁县| 来安县| 金门县| 文安县| 武宁县| 栖霞市| 大石桥市| 保山市|