本章目标
可以通过Java反射机制取得使用的全部Annotation
可以通过Java反射机制取得指定的Annotation
通过反射取得Annotation
如果要想让一个Annotation起作用,则必须结合反射机制。在Class类中存在以下几种与Annotation操作有关的方法
定义一个简单类
例如:现在有如下的类使用了系统的三个内建Annotation
public class SimpleBeanOne { @SuppressWarnings("unchecked") // 使用@SuppressWarnings的Annotation @Deprecated // 使用@Deprecated的Annotation @Override // 使用@Override的Annotation public String toString() { // 覆写toString()方法 return "chaoyi!!!" ; // 返回信息 } }
取得全部的Annotation
import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class ReflectDemo01 { public static void main(String args[]) throws Exception {// 所有异常抛出 Class<?> c = null ; // 取得Class实例 c = Class.forName("SimpleBeanOne") ; Method toM = c.getMethod("toString"); // 取得toString()方法 Annotation an[] = toM.getAnnotations(); // 取得全部的Annotation for (Annotation a : an) { // foreach输出 System.out.println(a); // 直接输出信息 } } /* 结果: * @java.lang.Deprecated() * */ }
取得自定义的Annotation
以上的程序是取得了一个元素所声明的全部RUNTIME的Annotation,但是有时候需要取得的是某个指定的Annotation,所以此时在取得之前就必须进行明确的判断,使用isAnnotationPresent()方法进行判断。
定义一个RUNTIME的Annotation
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(value=RetentionPolicy.RUNTIME) // 此Annotation在类执行时依然有效 public @interface MyDefaultAnnotationReflect { public String key() default "choayi" ; // 定义一个key变量,默认值为“choayi” public String value() default "阅谁问君诵,水落清香浮" ; // 定义一个value变量,默认值为“阅谁问君诵,水落清香浮” }
在类中使用Annotation
public class SimpleBeanTwo { @SuppressWarnings("unchecked") // 使用@SuppressWarnings的Annotation @Deprecated // 使用@Deprecated的Annotation @Override // 使用@Override的Annotation // 使用自定义的Annotation并设置两个属性内容 @MyDefaultAnnotationReflect(key = "baidu", value = "www.baidu.cn") public String toString() { // 覆写toString()方法 return "Hello Chaoyi!!!" ; // 返回信息 } }
取得指定的Annotation
import java.lang.reflect.Method; public class ReflectDemo02 { public static void main(String args[]) throws Exception { Class<?> c = null ; // 取得Class实例 c = Class.forName("SimpleBeanTwo") ; Method toM = c.getMethod("toString"); // 取得toString()方法 if (toM.isAnnotationPresent(MyDefaultAnnotationReflect.class)) { MyDefaultAnnotationReflect mda = null; // 声明自定义的Annotation对象 // 取得自定义的Annotation mda = toM.getAnnotation(MyDefaultAnnotationReflect.class); String key = mda.key(); // 得到Annotation中指定变量的内容 String value = mda.value();// 得到Annotation中指定变量的内容 System.out.println("key = " + key);// 输出Annotation中的key System.out.println("value = " + value);// 输出Annotation中的value } } /* 结果: * key = baidu * value = www.baidu.cn * */ }
相关推荐
5. **反射与Annotation的结合**: 反射可以用来检查类、方法或字段是否被特定的Annotation注解,从而实现动态行为。例如,如果一个类标记了`@MyAnnotation`,反射可以获取到这个信息,并执行相应的逻辑。 6. **...
在Java编程中,反射(Reflection)和注解(Annotation)是两种非常强大的工具,它们能够帮助我们实现动态操作类、接口、方法等元数据,并在运行时检查类的信息。在这个场景中,我们将讨论如何结合使用反射和注解来...
最后,`Annotation`(注解)是Java 5引入的特性,它提供了一种元数据的方式,允许我们在代码中添加信息而不影响代码执行。注解可以被编译器、JVM或自定义工具读取,用于代码分析、验证、生成代码等。Java标准库提供...
当我们通过反射API访问Annotation时,会得到实现该接口的对象,从而获取成员信息。 4. **标准Annotation**:Java 5.0引入了三个标准Annotation,包括`@Override`、`@Deprecated`和`@ SuppressWarnings`。`@Override...
Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata...annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
处理Annotation通常发生在编译时(通过编译器插件)或运行时(通过反射API)。例如,`@Retention(RetentionPolicy.RUNTIME)`的Annotation可以通过`java.lang.reflect.AnnotatedElement`的API在运行时获取。 10. **...
1. **代码紧密结合:** Annotation与代码紧密结合,有助于提高代码的可读性和理解性。 2. **简化项目管理:** 减少了项目中的文件数量,使项目结构更加清晰,便于维护和管理。 3. **早期错误检测:** 在开发过程中,...
在这个例子中,`@Retention(RetentionPolicy.RUNTIME)`表明`CustomAnnotation`将在运行时保留,因此我们可以在`main`方法中通过反射获取到该注解的信息。 最后,`Demo.java`可能包含使用上述注解的实际业务逻辑。...
Annotation与Javadoc Tag相似,但有所不同。如果一个标记对Java文档有影响或者用于生成Java文档,那么它应该作为一个Javadoc Tag。否则,它应该作为Annotation。 6. **枚举在Annotation中的应用** 枚举可以作为...
本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和应用这些技术。 首先,让我们了解什么是AOP。面向切面编程是一种编程范式,它允许我们将关注点(如日志、事务管理等)从主业务...
031603_【第16章:Annotation】_反射与Annotation笔记.pdf 031604_【第16章:Annotation】_深入Annotation笔记.pdf 031701_【第17章:Java数据库编程】_JDBC概述笔记.pdf 031702_【第17章:Java数据库编程】_MySQL...
这意味着即使在运行时,我们也可以通过反射获取这些信息,增强了代码的灵活性。 6. **编译时代码生成** Android Annotation库的核心特性是编译时代码生成。通过使用Java的APT(Annotation Processing Tool),在...
注解的信息可以通过反射 API 在运行时读取,或者在编译时通过 Annotation Processing Tool (apt) 处理。工具可以分析注解并自动生成代码、XML 文件等,如生成序列化代码、持久化代码、客户端代码等。 ### 结论 ...
注解(Annotation)是Java编程语言中的一个重要特性,自Java 5版本引入,它提供了一种安全的方法来将元数据与代码关联。元数据是关于数据的数据,可以用来提供程序的额外信息,如编译器提示、运行时检查、代码生成等...
### 什么是Annotation? #### 一、Annotation的概念 在Java 1.5版本中引入了一个重要的新特性——**Annotation**(注解)。Annotation本质上是一种元数据(即关于数据的数据),它提供了一种机制来关联程序元素...