`
xuwenjin666
  • 浏览: 46667 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

自定义 Java Annotation ,读取注解值

    博客分类:
  • java
 
阅读更多
1. 首先是自定义注解:
package cn.veji.hibernate.po;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Privilege {
	String[] value();

}




2.定义使用注解类:

package cn.veji.hibernate.po;

package cn.veji.hibernate.po;

public class TestPrivilege {

	@Privilege( { "a" })
	public void a() {
	}

	@Privilege( { "b" })
	public void b() {
	}

	@Privilege( { "c" })
	public void c() {
	}

}




3.读取注解值帮助类:

package cn.veji.hibernate.po;

package cn.veji.hibernate.test;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import cn.veji.hibernate.po.Privilege;
import cn.veji.hibernate.po.TestPrivilege;

public class AnnotationUtil {

	public static AnnotationUtil anno = null;

	public static AnnotationUtil getInstance() {
		if (anno == null) {
			anno = new AnnotationUtil();
		}
		return anno;
	}

	/**
	 * 读取注解值
	 * 
	 * @param annotationClasss 处理Annotation类名称
	 * @param annotationField 处理Annotation类属性名称
	 * @param className 处理Annotation的使用类名称
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("all")
	public Map<String, String> loadVlaue(Class annotationClasss,
			String annotationField, String className) throws Exception {

		System.out.println("处理Annotation类名称  === "+annotationClasss.getName());
		System.out.println("处理Annotation类属性名称  === "+annotationField);
		System.out.println("处理Annotation的调用类名称  === "+className);
		Map<String, String> map = new HashMap<String, String>();
		Method[] methods = Class.forName(className).getDeclaredMethods();
		for (Method method : methods) {
			if (method.isAnnotationPresent(annotationClasss)) {
				Annotation p = method.getAnnotation(annotationClasss);
				Method m = p.getClass()
						.getDeclaredMethod(annotationField, null);
				String[] values = (String[]) m.invoke(p, null);
				for (String key : values) {
					System.out.println("注解值 === " + key);
					map.put(key, key);
				}
			}
		}
		System.out.println("map数量  === " + map.size());
		return map;
	}

	public static void main(String[] args) throws Exception {

		AnnotationUtil.getInstance().loadVlaue(Privilege.class, "value",
				TestPrivilege.class.getName());
	}

}




4.执行结果:


处理Annotation类名称  === cn.veji.hibernate.po.Privilege
处理Annotation类属性名称  === value
处理Annotation的调用类名称  === cn.veji.hibernate.po.TestPrivilege
注解值 === c
注解值 === a
注解值 === b
map数量  === 3


分享到:
评论

相关推荐

    Java自定义注解Annotation的使用

    ### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...

    Java自定义注解使用反射获取字段注解

    System.out.println("注解值:" + myAnnotation.value()); } else { System.out.println("字段上没有找到该注解"); } } } ``` 在上述代码中,我们首先获取`AnnotationDemo`类的`testField`字段,然后通过`...

    java自定义注解

    在这个例子中,我们可以创建一个处理器来读取和打印带有`MyAnnotation`的类的注解值: ```java @SupportedAnnotationTypes("com.example.MyAnnotation") @SupportedSourceVersion(SourceVersion.RELEASE_8) public ...

    Java Annotation注解.doc

    3. **处理Annotation**:Java提供API来读取注解信息,例如`getAnnotations()`、`isAnnotationPresent()`等。此外,还可以使用Annotation Processing Tool (APT)在编译时处理注解,生成额外的源代码或类文件。 4. **...

    自定义注解实现伪动态传参的小demo

    在这个小demo中,主要展示了如何创建自定义注解、如何应用注解以及如何在运行时读取注解信息。这只是一个基础示例,实际场景中,你可以根据需求扩展注解的用途,比如添加更多的元素、实现更复杂的逻辑等。此外,还...

    自定义JSONObject属性过滤注解

    这个注解有两个主要部分:`@Target(ElementType.FIELD)`表示该注解只能应用于字段,`@Retention(RetentionPolicy.RUNTIME)`意味着注解会在运行时保留,这样我们可以在序列化或反序列化过程中读取到它。 接下来,...

    java 自定义注解例子

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器或JVM提供信息的方式,这些信息可以用于代码分析、编译时检查或者运行时处理。自定义注解允许开发者创建自己的注解类型,以满足特定项目需求。...

    java 自定义注解

    Java自定义注解是Java平台提供的一种元数据机制,它允许程序员在代码中添加额外的信息,这些信息可以被编译器、JVM或其他工具在编译时或运行时读取,用于实现各种功能,如代码生成、代码分析、依赖注入等。自定义...

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    首先,了解注解(Annotation)在Java中的角色。注解是一种元数据,它提供了在源代码中添加信息的方式,这些信息可以被编译器或运行时环境读取和处理。自定义注解允许我们创建自己的标记,用于特定目的,比如代码分析...

    Java 自定义注解及利用反射读取注解的实例

    Java 自定义注解及利用反射读取注解的实例 Java 中的注解(Annotation)是一种元数据,用于提供有关程序元素的信息,而不影响程序的执行。Java 中提供了多种元注解,包括 @Target、@Retention、@Documented、@...

    java annotation demo

    注解处理器是Java编译器的一部分,它们在编译期间读取注解并执行相应操作,例如生成代码、验证输入等。`javax.annotation.processing`包提供了处理注解所需的工具。 在实际应用中,Java注解广泛用于依赖注入(如...

    JAVA Annotation学习

    通过上述示例中的JavaAnnotation压缩包,你可能包含了注解的使用示例、源码以及相关的博客文章。源码可以帮助你理解注解的实际应用,而博客文章可能深入解释了注解的工作原理和最佳实践。学习这些材料,将有助于你...

    Java annotation (JDK5)

    注解(Annotation)提供了一种元数据的形式,允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、JVM或者专门的处理工具在编译时或运行时读取和处理。注解在软件开发中主要应用于代码的自动生成、编译检查、...

    JDK5.0 Java Annotation 介绍(ppt)

    2. **自定义 Annotation**:除了预定义的 Annotation,开发者还可以定义自己的 Annotation 类型,并通过注解处理器来处理这些 Annotation,实现特定的功能。 3. **运行时可见性**:有些 Annotation 在编译时有效,...

    使用Java自定义注解模拟实现SpringBoot相关注解.zip

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境读取。Spring框架广泛使用了注解来简化配置,例如`@Autowired`、`@Component`、`@Configuration`...

    Spring java注解,元注解和自定义注解

    ### Spring Java注解、元注解与自定义注解详解 #### 一、Java注解简介 在深入了解Spring框架中的注解应用之前,我们首先需要对Java注解有一个基本的认识。Java注解(Annotation)是一种元数据,可以为程序代码添加...

    2个案例 自定义annotation进行查询对象封装 itext 打印案例

    在IT行业中,自定义注解(Annotation)是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,增强了代码的可读性和可维护性。这些元数据可以被编译器或运行时环境用来执行特定的任务,例如代码分析、...

    Java Annotation的讲解和例子

    2. 运行时处理:通过反射机制,可以在运行时读取注解信息,进行相应的处理。例如,Spring框架中的依赖注入就是通过注解实现的。 3. 编译器工具:注解可以作为编译器插件的输入,帮助生成代码或执行特定验证。 三、...

Global site tag (gtag.js) - Google Analytics