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 静夜思 阅读(1745) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: