java自定义注解和使用[通俗易懂]

自定义注解@Target自定义注解的使用范围ElementType.METHOD:方法声明ElementType.TYPE:类、接口(包括注解类型)或enum声明ElementType.CONSTRUCTOR:构造器的声明ElementType.FIELD:域声明(包括enum实例)ElementType.LOCAL_VARIABLE:局部变量声明ElementType.PACKA…

大家好,又见面了,我是你们的朋友全栈君。

自定义注解

@Target
自定义注解的使用范围
ElementType.METHOD:方法声明
ElementType.TYPE:类、接口(包括注解类型)或enum声明
ElementType.CONSTRUCTOR:构造器的声明
ElementType.FIELD:域声明(包括enum实例)
ElementType.LOCAL_VARIABLE:局部变量声明
ElementType.PACKAGE:包声明
ElementType.PARAMETER:参数声明
@Retention
注解级别信息
RetentionPolicy.RUNTIME:VM运行期间保留注解,可以通过反射机制读取注解信息
RetentionPolicy.SOURCE:注解将被编译器丢弃
RetentionPolicy.CLASS:注解在class文件中可用,但会被VM丢弃
@Document
将注解包含在Javadoc中
@Inherited
允许子类继承父类中的注解,默认不能被子类继承
创建一个自定义注解
/** * 自定义注解 * @author Le */
@Target({ 
   ElementType.METHOD, ElementType.TYPE})
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation { 
   
	String msg() default "this is myAnnotation"; //default 默认值
}
定义一个接口
package mydemo;

@MyAnnotation //使用自定义注解
public interface Message { 
   
	
	@MyAnnotation
	public void msg();
}

接口实现
package mydemo;

@MyAnnotation
public class MessageImpl implements Message { 
   

	@Override
	@MyAnnotation(msg = "我是自定义注解信息...")
	public void msg() { 
   
		// TODO Auto-generated method stub
	}
}

测试

package mydemo;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class Mytest { 
   

	Annotation[] annotation = null;
	
	public static void main(String[] args) throws ClassNotFoundException { 
   
		new Mytest().getAnnotation();
	}

	private void getAnnotation() throws ClassNotFoundException { 
   
		Class<?> clazz = Class.forName("mydemo.MessageImpl"); //
		boolean isEmpty = clazz.isAnnotationPresent(mydemo.MyAnnotation.class); //判断clazz是否使用了MyAnnotation自定义注解
		if (isEmpty) { 
   
			annotation = clazz.getAnnotations(); //获取注解接口
			for (Annotation a : annotation) { 
   
				MyAnnotation my = (MyAnnotation) a; //强制转换成MyAnnotation类型
				System.out.println(clazz + "--" + my.msg());
			}
		}
		
		Method[] method = clazz.getMethods();
		System.out.println("Method");
		for (Method m : method) { 
   
			boolean ismEmpty = clazz.isAnnotationPresent(mydemo.MyAnnotation.class);
			if (ismEmpty) { 
   
				Annotation[] aa = m.getAnnotations();
				for (Annotation a : aa) { 
   
					MyAnnotation my = (MyAnnotation) a;
					System.out.println(m + "--" + my.msg());
				}
			}
		}	
	}
}
运行输出内容如下:
class mydemo.MessageImpl--this is myAnnotation
Method
public void mydemo.MessageImpl.msg()--我是自定义注解信息...

参考:Java 自定义注解及利用反射读取注解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129174.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • redis默认端口为什么是6379_redis连接池的作用

    redis默认端口为什么是6379_redis连接池的作用找到redis的安装目录,正常应该都会在/usr/local/下*cd/usr/local/redis-5.0.8*viredis.conf*键入i>>修改默认端口号:6379>>6380,esc>>:wq*redis-server/usr/local/redis-5.0.8/redis.conf

    2025年12月16日
    3
  • linux下U盘文件系统类型的识别以及挂载

    手上有装好文件系统的CF一只,插上卡套,类比于U盘。1.先进入/mnt/目录新建一个usb目录cd/mnt/mkidrusb2.fdisk-l,然后插上U盘,fdisk-l查看是否有新的硬盘添加上来了?这时候我若是挂载是不知道sdb的文件类型的,也不清楚该挂载sdbx几。不需挂载就能查看的命令:

    2022年4月14日
    49
  • redhat安装yum源_redhat yum源

    redhat安装yum源_redhat yum源Yum是RedHat和基于RedHat的Linux发行版中的包管理器,它允许您管理RedHat系统上软件的各个方面。你不会在这里详细学习Yum命令,相反,这个Yum备忘单为您提供了所有主要Yum包管理器命令及其各自功能的快速简单的概述。安装、卸载和升级包以下是用于安装、删除和更新软件包的Yum命令。install:从yum存储库安装软件包sudoyuminstallnginxremove:删除已安装的软件包及其依赖项sudoyumre

    2025年6月29日
    4
  • jwt单点登录流程设计

    jwt单点登录流程设计如不了解jwt,请戳:程序猿DD,什么是jwt下面我给出一个jwt实现单点登录的流程: 

    2022年5月21日
    42
  • uva 10825 – Anagram and Multiplication(暴力)

    uva 10825 – Anagram and Multiplication(暴力)

    2022年1月9日
    57
  • 对标 VS Code,JetBrains 的下一代 IDE :Fleet[通俗易懂]

    对标 VS Code,JetBrains 的下一代 IDE :Fleet[通俗易懂]昨天(11月29日),JetBrains网站上出现了一个全新的IDE–Fleet它是谁呢?这软件的风格,怎么看都不像JB的亲儿子。。不过,我很负责任地告诉,这就是JetBrains的下一代IDE,妥妥的亲儿子。目前Fleet还处于开发阶段,还没有开放下载使用,如果你想尝鲜,可以通过这个链接(https://www.jetbrains.com/fleet/preview/)填写一下表格申请。看到这个消息,我就赶紧去申请了,但何时会通过,官方表示也不清楚。虽然还无法使

    2022年5月28日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号