今天课堂上讲EJB的JTA管理,其中大量试用了标注Annotation,突然对于Annotation的运行机制有点迷糊,于是Google了一下,对Annotation有了一点了解!
Java Annotation手册:http://www.blogjava.net/mlh123caoer/archive/2007/09/06/143260.html
里面从基础讲起,很适合新手了解!主要看了一下运行机制的内容。
文章里说:
Annotation与反射
在java5.0 中Java.lang.reflect提供的反射API被扩充了读取运行时annotation的能力。让我们回顾一下前面所讲的:一个 annotation类型被定义为runtime retention后,它才是在运行时可见,当class文件被装载时被保存在class文件中的annotation才会被虚拟机读取。那么 reflect是如何帮助我们访问class中的annotation呢?
下文将在java.lang.reflect用于 annotation的新特性,其中java.lang.reflect.AnnotatedElement是重要的接口,它代表了提供查询 annotation能力的程序成员。这个接口被java.lang.Package、java.lang.Class实现,并间接地被Method类、 Constructor类、java.lang.reflect的Field类实现。而annotation中的方法参数可以通过Method类、 Constructor类的getParameterAnnotations()方法获得。
下面的代码使用了AnnotatedElement类的isAnnotationPresent()方法判断某个方法是否具有@Unstable annotation,从而断言此方法是否稳定:
清单8:
import java.lang.reflect.*;
Class c = WhizzBangClass.class;
Method m = c.getMethod("whizzy", int.class, int.class);
boolean unstable = m.isAnnotationPresent(Unstable.class);
isAnnotationPresent ()方法对于检查marker annotation是十分有用的,因为marker annotation没有成员变量,所以我们只要知道class的方法是否使用了annotation修饰就可以了。而当处理具有成员的 annotation时,我们通过使用getAnnotation()方法来获得annotation的成员信息(成员名称、成员值)。这里我们看到了一套优美的java annotation系统:如果annotation存在,那么实现了相应的annotation类型接口的对象将被getAnnotation()方法返回,接着调用定义在annotation类型中的成员方法可以方便地获得任何成员值。
个人理解: 其实Annotation并没有那么神秘,对于运行时的annotation而言,只是在加载类信息的时候,用反射判断当前是否使用了annotation而已,如果有使用标注,那么则去加载标注的类文件,然后创建对象,赋值,使用。从而达到EJB中的依赖注入、实体管理和aop编程的!
分享到:
相关推荐
通过这个"Android Annotation 实例"的压缩包,你可以深入学习如何在实际项目中运用这些注解,理解它们的工作原理,以及如何通过注解优化代码结构和提高开发效率。实践中,不断尝试并结合个人项目需求,你将更好地...
"annotation.rar"这个压缩包文件很可能包含了关于JDK内置注解的工作原理以及如何自定义实现个人注解的详细教程。下面我们将深入探讨这些知识点。 1. **JDK内置注解**: - **@Override**: 用于标记一个方法是重写了...
2. **代码分析**:第三方工具可以使用注释来理解代码结构和意图,进行代码质量检查、依赖分析等。 3. **编译检查**:在编译阶段,注释可以指示编译器进行特定的检查,例如`@Override`用于确保方法覆盖了超类方法,`@...
源码阅读是深入理解laravel工作原理的重要途径,而`laravel-annotation-master`这个压缩包很可能是作者对laravel源码进行详细注解的结果,旨在帮助其他开发者更好地理解和学习laravel。 ### 1. 注解在laravel中的...
在Hibernate中,`@OneToOne`注解用于定义两个实体类之间的一对一关联,通常用于表示两个实体之间存在唯一对应的关系,例如用户与个人资料之间的关联。 总的来说,这个项目组合了多个强大的工具和技术,旨在构建一个...
通过与相应的客户端应用程序配合,用户可以在任何支持的文件上轻松地添加个人见解、批注或解释,同时这些注释可以被其他用户查看和回应,实现了内容的深度互动和理解。 AWS的开放源代码特性使得开发者能够查看、...
2. **Annotation支持**:注解在Java开发中已经成为一种常见的元数据声明方式。通过引入注解,我们可以简化配置,比如在Action类或方法上使用注解来指定请求映射、输入输出结果等,这使得代码更易读,也减少了XML配置...
8. **注解(Annotation)**:理解注解的原理和使用,包括自定义注解。 9. **JVM**:了解Java虚拟机的工作原理,优化内存管理、垃圾回收等。 10. **设计模式**:学习常见的23种设计模式,提升代码的可读性和可维护...
14. **注解(Annotation)**:Java的注解在现代开发中被广泛应用,如@Component、@Service等,用以增强代码的元数据信息。 通过分析和学习这个名为"08陈冠存"的压缩包中的代码,可以深入了解一个Java开发者的技术栈...
在大规模数据标注项目中,这是一项非常重要的功能,可以提高工作效率,减少由于个人理解差异导致的标注不一致性。 再者,COAT管理员组件则负责整个系统的设置和管理,包括用户权限控制、项目配置、数据导入导出等,...
9. **注解(Annotation)**:注解是Java提供的一种元数据,可以用来提供编译器或运行时系统所需的信息。了解预定义的注解以及如何自定义注解,可以优化代码的维护和处理。 10. **网络编程**:Java提供了Socket编程...
这份"java 个人学习资料"很可能是为了帮助初学者或者有经验的开发者深化对Java语言的理解和应用能力。以下是对Java语言的一些核心知识点的详细介绍: 1. **Java基础**:Java的基础包括变量、数据类型(如整型、浮点...
理解封装、继承和多态是核心,同时要掌握集合类、泛型、自动装箱拆箱以及注解(Annotation)的使用。 2. **数据库知识**:学习SQL语言,包括DML(增删改查)、DQL(查询)、DDL(定义表结构)、DCL(权限控制),...
这份"Java基础加强-个人总结doc"文档,结合了张孝祥老师的PPT,为我们提供了全面而深入的学习材料。以下是这份文档可能涵盖的一些核心知识点: 1. **基础知识**:这部分涵盖了Java语言的基础语法,包括变量、数据...
这份"关于个人的java笔记整理"涵盖了Java的基础知识、核心概念以及可能包含的试题,旨在帮助学习者巩固理解,为日后的开发工作提供参考。 笔记整理首先可能会涉及Java的基础语法,包括但不限于变量、数据类型、...
13. **注解(Annotation)** 注解为编译器和工具提供元数据,可以在编译、部署和运行时被解析和执行。 14. **垃圾收集与内存管理** Java的自动内存管理主要依赖垃圾收集机制,理解其工作原理和性能调优策略。 ...
3. **降低成本**:开源软件通常免费提供,降低了组织和个人的使用成本,使得更多的人有机会接触到高质量的工具。 4. **可定制化**:根据具体需求,用户或开发者可以自定义和扩展LabelMe的功能,以适应特定的计算机...
13. **注解(Annotation)**:理解注解的作用,如何自定义注解以及使用反射读取注解信息。 通过"test.txt"文件,考生可以进行模拟练习,检查自己的理解和应用能力。试题讲解通常会包含解题思路、陷阱解析以及易错点...
在Java的学习过程中,注解(Annotation)和反射(Reflection)是两个非常关键且高级的主题。 注解是Java提供的一种元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以被编译器或者运行时环境用来执行...
- 注解(Annotation):理解注解的使用,如自定义注解、元注解以及反射中注解的应用。 - Java模块系统(Jigsaw):了解模块化开发,模块的声明与依赖管理。 4. **Java算法**: - 排序算法:熟练掌握冒泡、选择、...