`
chaoyi
  • 浏览: 309679 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

反射与Annotation

 
阅读更多

本章目标
可以通过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
 * */
} 

 

 

 

 

 

  • 大小: 43.3 KB
分享到:
评论

相关推荐

    JAVA简单的反射案例

    5. **反射与Annotation的结合**: 反射可以用来检查类、方法或字段是否被特定的Annotation注解,从而实现动态行为。例如,如果一个类标记了`@MyAnnotation`,反射可以获取到这个信息,并执行相应的逻辑。 6. **...

    反射+annotation 完成数据库连接

    在Java编程中,反射(Reflection)和注解(Annotation)是两种非常强大的工具,它们能够帮助我们实现动态操作类、接口、方法等元数据,并在运行时检查类的信息。在这个场景中,我们将讨论如何结合使用反射和注解来...

    Core.Java基础教程_13.高级编程-反射、动态代理与Annotation.pdf

    最后,`Annotation`(注解)是Java 5引入的特性,它提供了一种元数据的方式,允许我们在代码中添加信息而不影响代码执行。注解可以被编译器、JVM或自定义工具读取,用于代码分析、验证、生成代码等。Java标准库提供...

    Annotation手册

    当我们通过反射API访问Annotation时,会得到实现该接口的对象,从而获取成员信息。 4. **标准Annotation**:Java 5.0引入了三个标准Annotation,包括`@Override`、`@Deprecated`和`@ SuppressWarnings`。`@Override...

    JAVA 标注annotation

    Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata...annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。

    Annotation详细介绍(大全)

    处理Annotation通常发生在编译时(通过编译器插件)或运行时(通过反射API)。例如,`@Retention(RetentionPolicy.RUNTIME)`的Annotation可以通过`java.lang.reflect.AnnotatedElement`的API在运行时获取。 10. **...

    用Annotation简化Java程序的开发(PDF)

    1. **代码紧密结合:** Annotation与代码紧密结合,有助于提高代码的可读性和理解性。 2. **简化项目管理:** 减少了项目中的文件数量,使项目结构更加清晰,便于维护和管理。 3. **早期错误检测:** 在开发过程中,...

    annotation

    在这个例子中,`@Retention(RetentionPolicy.RUNTIME)`表明`CustomAnnotation`将在运行时保留,因此我们可以在`main`方法中通过反射获取到该注解的信息。 最后,`Demo.java`可能包含使用上述注解的实际业务逻辑。...

    Annotation技术

    Annotation与Javadoc Tag相似,但有所不同。如果一个标记对Java文档有影响或者用于生成Java文档,那么它应该作为一个Javadoc Tag。否则,它应该作为Annotation。 6. **枚举在Annotation中的应用** 枚举可以作为...

    利用 spring annotation AOP 反射 记录日志

    本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和应用这些技术。 首先,让我们了解什么是AOP。面向切面编程是一种编程范式,它允许我们将关注点(如日志、事务管理等)从主业务...

    Java开发详解.zip

    031603_【第16章:Annotation】_反射与Annotation笔记.pdf 031604_【第16章:Annotation】_深入Annotation笔记.pdf 031701_【第17章:Java数据库编程】_JDBC概述笔记.pdf 031702_【第17章:Java数据库编程】_MySQL...

    Android Annotation 安卓注解实例

    这意味着即使在运行时,我们也可以通过反射获取这些信息,增强了代码的灵活性。 6. **编译时代码生成** Android Annotation库的核心特性是编译时代码生成。通过使用Java的APT(Annotation Processing Tool),在...

    Java Annotation详解

    注解的信息可以通过反射 API 在运行时读取,或者在编译时通过 Annotation Processing Tool (apt) 处理。工具可以分析注解并自动生成代码、XML 文件等,如生成序列化代码、持久化代码、客户端代码等。 ### 结论 ...

    annotation详解

    注解(Annotation)是Java编程语言中的一个重要特性,自Java 5版本引入,它提供了一种安全的方法来将元数据与代码关联。元数据是关于数据的数据,可以用来提供程序的额外信息,如编译器提示、运行时检查、代码生成等...

    什么是Annotation?

    ### 什么是Annotation? #### 一、Annotation的概念 在Java 1.5版本中引入了一个重要的新特性——**Annotation**(注解)。Annotation本质上是一种元数据(即关于数据的数据),它提供了一种机制来关联程序元素...

Global site tag (gtag.js) - Google Analytics