从JDK1.5之后,注解在各大框架上得到了广泛的应用。下面这个例子中,你可以判断一个类或者方法或者字段上有没有注解,以及怎么获取上面的注解值。话不多说,代码如下:
AnnotationTest01.java
package com.zkn.newlearn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD,ElementType.PARAMETER}) public @interface AnnotationTest01 { String color(); }
AnnotationTest02.java
package com.zkn.newlearn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface AnnotationTest02 { String getUserName(); }
AnnotationTest04.java
package com.zkn.newlearn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.FIELD}) public @interface AnnotationTest04 { String getAddress(); }
AnnotationTest03.java
package com.zkn.newlearn.annotation; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 测试Annotation * @author zkn * */ @AnnotationTest02(getUserName="zhangsan") public class AnnotationTest03 { @AnnotationTest01(color="red") public static String testColor(String color){ System.out.println(color); return color; } @AnnotationTest04(getAddress="北京市海淀区") String address; public static void main(String[] args) { //获取方法上的注解值 Method[] methods = AnnotationTest03.class.getDeclaredMethods(); if(methods != null){ for(Method method : methods){ AnnotationTest01 annotation = method.getAnnotation(AnnotationTest01.class); if(annotation == null) continue; Method[] me = annotation.annotationType().getDeclaredMethods(); for(Method meth : me){ try { String color = (String) meth.invoke(annotation,null); System.out.println(color); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } //获取类上的注解值 AnnotationTest02 anno = AnnotationTest03.class.getAnnotation(AnnotationTest02.class); if(anno != null){ Method[] met = anno.annotationType().getDeclaredMethods(); for(Method me : met ){ if(!me.isAccessible()){ me.setAccessible(true); } try { System.out.println(me.invoke(anno, null)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } //获取字段上的注解值 AnnotationTest03 noon = new AnnotationTest03(); Field[] field = AnnotationTest03.class.getDeclaredFields(); if(field != null){ for(Field fie : field){ if(!fie.isAccessible()){ fie.setAccessible(true); } AnnotationTest04 annon = fie.getAnnotation(AnnotationTest04.class); Method[] meth = annon.annotationType().getDeclaredMethods(); for(Method me : meth){ if(!me.isAccessible()){ me.setAccessible(true); } try { //给字段重新赋值 fie.set(noon, me.invoke(annon, null)); System.out.println(fie.get(noon)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } } }
相关推荐
本教程将深入探讨如何通过反射获取类、方法上的注解以及注解中的值和方法参数。 1. **注解的定义与使用** 注解以`@`符号开头,后面跟着注解的类型。例如,`@Override`表示方法重写,`@Deprecated`表示某个功能已...
在深入探讨如何通过反射获取实体类的字段和值之前,我们先来理解一下反射是什么以及它在.NET框架中的作用。反射是一种强大的编程技术,允许运行时动态地获取类型的信息并操作对象。它提供了对程序集、模块、类型、...
在上面的代码中,我们使用了 Java 的反射机制来获取注解的值。 结论 Java 注解之运行时修改字段的注解值操作是非常有用的技术,可以帮助我们在实际开发中更方便地处理和修改代码。本文主要介绍了 Java 注解之运行...
然后,通过反射获取注解的值,并根据这些信息注册Servlet。这使得我们的代码更加模块化,也便于使用依赖注入和其他高级功能。 此外,我们还可以使用`java.lang.reflect`包中的类,如`Class`、`Method`和`Field`,在...
然而,当我们通过反射获取类的属性时,可能会遇到一个常见的问题:属性的顺序并不总是按照我们期望的方式呈现。默认情况下,Java反射API(如`Field[] getDeclaredFields()`方法)返回的字段数组顺序与它们在源代码中...
在`export`方法中,我们可以使用`java.lang.reflect`包下的API来获取`User`类的字段,然后检查它们是否包含`@ExcelField`注解。对于每个带有注解的字段,我们从对应的用户对象中获取值,并将其写入Excel工作表的相应...
注解(Annotation)是一种元数据,提供了在编译时和运行时对代码进行标记的方法,而反射(Reflection)则是Java提供的一种能力,允许程序在运行时检查和操作类、接口、字段和方法等对象。接下来,我们将深入探讨这两...
1. **字段映射**:通过反射获取类的Field对象,我们可以知道类的属性及其类型。这有助于将对象的属性值转换为SQL语句中的参数,例如,使用PreparedStatement的set方法设置参数。 2. **动态SQL**:通过反射,我们...
本验证工具的核心思想是通过定义一系列自定义注解来标识需要验证的字段或方法,并通过反射技术动态获取这些注解信息来进行验证。这样做的好处是可以将验证逻辑与业务逻辑分离,使得验证规则更加清晰明了,同时也方便...
- 运行时处理:通过反射获取类、方法、字段上的注解,如`Class.getAnnotations()`、`Method.getAnnotation(MyAnnotation.class)`。 4. **注解的应用场景**: - AOP(面向切面编程):例如Spring框架中的切面注解...
在这个例子中,我们可以通过反射获取`User`类上的`@Table`注解,并从中提取出"users"作为表名;同样,可以获取`username`字段上的`@Column`注解,得到"username"作为列名。然后,我们就可以基于这些信息生成如下的...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法的信息。通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至修改类的行为。这个过程通常...
《利用反射技术处理自定义注解》的设计与实现,旨在探讨如何结合这两种机制以实现更灵活、高效的代码处理。 在这个项目中,`AnnotationPrj` 分为四个主要部分:`annotation`、`deal`、`domain` 和 `test`,以及一个...
总的来说,"注解框架实体类映射"是SSH2框架中利用Java注解来定义和管理数据库表的一种方法,它减少了XML配置,增强了代码的可读性,并结合Spring和Hibernate的能力,实现了高效的数据操作和业务逻辑处理。...
1. 反射(Reflection):Java反射机制允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用其方法。通过`Class`类,我们可以实例化未知类型的对象,调用私有方法,访问私有字段,以及检查类的...
这个教程"655.653.JAVA基础教程_反射-获取运行时类的接口、所在包、注解等(655)"将深入讲解如何利用反射获取关于类的各种元数据,包括接口、包信息以及注解。以下是对这些知识点的详细解释: 1. 反射的概念与作用:...
内容概要 Java的反射机制是指在运行时通过分析类的信息实现动态调用类的方法和访问类的属性...掌握反射机制的目标是能够在运行时获取类的信息,并灵活地利用这些信息来完成所需的操作,以增加程序的灵活性和可扩展性。
本案例通过注解的方式,简化了JDBC操作数据库的过程,并利用反射机制动态地调用这些操作。 首先,让我们详细了解Java注解。Java注解是一种元数据,它提供了一种安全的方法来将信息附加到代码中,而不会改变其语义。...
它能获取类的结构(如类名、字段、方法),创建对象,调用方法,访问私有成员。反射是许多框架(如Spring、Hibernate)的基础,用于实现动态代理、元编程等功能。然而,反射的使用应谨慎,因为它可能会降低性能且...
`java.lang.reflect`包中的`Class`, `Method`, `Field`等类提供了`getAnnotations()`、`getDeclaredAnnotations()`等方法来获取类、方法或字段上的注解。 5. **示例代码分析**: - `Sfe.java`: 可能是一个实体类,...