Java中的自定义注解

2023-05-16

       自定义注解

Description.java(这里自定义Description注解)

package com.ann.test;

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

//元注解:修饰注解的注解
/*
 * @Target 注解--》声明自定义注解的作用域
 * CONSTRUCTOR 构造方法声明
 * FIELD 字段声明
 * LOCAL_VARIABLE 局部变量声明
 * METHOD 方法声明
 * PACKAGE 包声明
 * PARAMETER 参数声明
 * TYPE 类,接口
 */
/*
 * @Retention 注解--》声明自定义注解的生命周期
 * SOURCE 只在源码显示,编译时会被丢弃
 * CLASS 编译时会记录到class中,运行时忽略
 * RUNTIME 运行时存在,可以通过反射读取
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited //允许子类继承 -> 而且子类只会继承 作用在类作用域的注解
@Documented //生成javadoc时会包含注解

//自定义注解
/*
 * 使用 @interface 关键字定义注解
 * 成员以无参无异常方式声明
 * 可以用default为成员指定一个默认值
 * 成员类型是受限的,合法类型包括原始类型及String, Class, Annotation, Enumeration
 * 如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
 * 注解类可以没有成员,没有成员的注解为标识注解
 */
public @interface Description {
	/*String desc();
	
	String author();
	
	int age() default 18;*/
	
	String value();
}
       注解的使用:

Person.java (Person类使用Description注解)

package com.ann.test;

//该注解可以被子类继承
@Description("I am class annotation")
public class Person {
	
	//该注解将不会被子类继承
	@Description("I am method annotation")
	public String name() {
		return null;
	}
	
	public int age() {
		return 0;
	}
	
	@Deprecated
	public void sing() {
		
	}
}

       注解的继承:

Child.java (类上会继承Description注解(即 @Description("I am class annotation") ),而方法则不会)

package com.ann.test;

public class Child extends Person {

	@Override
	public String name() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int age() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void sing() {
		// TODO Auto-generated method stub
		
	}
	
}

       解析注解:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。

ParseAnn.java

package com.ann.test;

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

//解析注解(只能获取到运行时注解)
public class ParseAnn {
	public static void main(String[] args) {
		
		try {
			//1.使用类加载器加载类
			Class c = Class.forName("com.ann.test.Child");
			//2.找到类上面的注解
			boolean isExist = c.isAnnotationPresent(Description.class);
			if(isExist) {
				//3.拿到注解实例
				Description d = (Description) c.getAnnotation(Description.class);
				System.out.println(d.value());
			}
			
			//4.找到方法上的注解
			Method[] ms = c.getMethods();
			for(Method m : ms) {
				boolean isMExist = m.isAnnotationPresent(Description.class);
				if(isMExist) {
					Description d = (Description)m.getAnnotation(Description.class);
					System.out.println(d.value());
				}
			}
			
			//另外一种解析方法
			for(Method m : ms) {
				Annotation[] as = m.getAnnotations();
				for(Annotation a : as) {
					if(a instanceof Description) {
						Description d = (Description)a;
						System.out.println(d.value());
					}
				}
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
}
       运行结果如下:



        Child.java 只继承了父类的类作用域上的注解。只输出了类上的注解。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中的自定义注解 的相关文章

随机推荐

  • PHP的单文件上传类

    提交单文件的页面 upload php lt doctype html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title
  • PHP的多文件上传类

    提交表单的页面 upload php lt doctype html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title
  • Nginx负载均衡配置实例详解

    转载自 xff1a http www php100 com html program nginx 2013 0905 5525 html 负载均衡是我们大流量网站要做的一个东西 xff0c 下面我来给大家介绍在Nginx服务器上进行负载均衡
  • 基于Bootstrap使用jQuery实现简单可编辑表格

    editTable js 提供编辑表格当前行 添加一行 删除当前行的操作 xff0c 其中可以设置参数 xff0c 如 xff1a operatePos 用于设置放置操作的列 xff0c 从0开始 xff0c 1表示以最后一列作为放置操作的
  • ThinkPHP 大D方法思想下的JDBC操作数据库D类

    这里我封装出来的D 类 xff0c 是根据 ThinkPHP 中的 D 方法中做出来的 xff0c 其中有些出入的地方 xff0c 我进行了一些个性化的修正 xff0c 如 xff1a ThinkPHP 中操作数据库时 xff0c 需要在配
  • 基于MVC设计模式实现简单PHP框架(雏形)-初期

    xff08 记住 xff1a 这里只是提供思考的过程 xff09 其实这里只是一个我们课的Web实验 课程设计题目统计系统 xff0c 在做实验的过程中起初只是想往MVC靠拢而已 xff0c 却不知不觉地 实现 了基于MVC的简单框架的雏形
  • Rocketmq入门介绍

    目录 一 Rocketmq优势 二 Rocketmq与其他MQ对比 三 MQ基本概念 四 RocketMQ的4个组件 五 集群部署结构 工作流程 xff1a 模块功能特性 xff1a Nameserver Broker 生产者 Produc
  • 我的简单PHP框架——LabPHP

    就我上次提到的 基于MVC设计模式实现简单PHP框架 xff08 雏形 xff09 初期 这次列出我实现的LabPHP简易框架 xff0c 该框架中没有使用任何的模板引擎 xff0c 所以说要在模板中使用到php变量的话 xff0c 仍然需
  • 我的LabPHP框架的Demo应用——课程设计题目统计系统

    1 界面制作 xff08 为了方便起见 xff0c 这里我采用了Bootstrap 框架制作界面 xff09 xff1b 2 数据库设计 xff0c 正确创建students 表 xff1b admin表 xff1a 3 项目目录结构如下
  • 基于Bootstrap使用jQuery实现输入框组input-group的添加与删除

    注意这里要求使用到Bootstrap框架的输入框组 xff0c 如 xff1a lt div class 61 34 row 34 gt lt div class 61 34 col lg 6 34 gt lt div class 61 3
  • 网页中时光轴的简单实现

    时光轴效果如下 xff1a 鼠标滑过当前项时 xff0c 左侧图标大小变大 xff1a index html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta
  • 伸缩自如的时光轴实现

    上回说到简单时间轴的实现 xff0c 这一次针对上回的实现的时光轴 xff0c 增加时光轴收起的功能 为了方便重用 xff0c 我分离css样式和js 使用过程中主要注意一下尽量使用css定义的时光轴样式即可 时光轴收起功能的实现过程可以查
  • 伸缩自如的时光轴实现——改进版

    上回讲到的是时光轴 伸缩自如 的实现 xff0c 如果基于响应式制作的话 xff0c 可能存在着许多潜在的BUG 如 xff1a 窗口变化时 xff0c 时光轴的 收起 和 展开 xff0c 都发生了一些变形 为此 xff0c 对原来的 t
  • 伸缩自如的时光轴实现_样式改版

    针对前几篇文章中实现的 伸缩自如 的时光轴 xff0c 对时光轴的样式进行又一次修改 xff0c 效果如下 xff1a 点击 收起 后 xff1a 修改后的 timeline css xff0c 如下 xff1a vertical time
  • ThinkPHP中的create方法与自动令牌验证

    转载自 xff1a Thinkphp中Create方法深入探究 ThinkPHP中的create方法与自动令牌验证实例教程 Thinkphp中Create方法深入探究 由于工作原因在thinkPHP的create 方法上遇到了问题 xff0
  • web安全之token和CSRF攻击

    上文我转载了两篇关于ThinkPHP令牌验证的文章 xff08 ThinkPHP中的create方法与自动令牌验证 xff09 其中提及到了 token xff0c 这里针对 token 的作用 xff0c 转载了另外两篇文章 xff08
  • java中的==、equals和hashCode以及hashCode生成

    转载自 xff1a xff08 点击打开链接 xff09 前言 java中 61 61 equals hashCode 都和对象的比较有关 xff0c 在java中这三者各有什么用处呢 xff0c 即java中为什么需要设计这三种对象的比较
  • javascript调用微信或QQ扫一扫

    项目里为了体验做的好点 xff0c 想直接通过js调用手机的扫一扫 xff1a 服务的用户主要是通过 xff1a 微信或QQ 之前使用过 微信或QQ的分享 腾讯移动WEB开发平台的 39 对外分享组件接口文档 39 http open mo
  • Java中的反射机制

    获取类的类类型的3种方式 xff0c 以及如何通过类的类类型创建实例对象 xff1f ClassDemo1 java package com reflect public class ClassDemo1 public static voi
  • Java中的自定义注解

    自定义注解 Description java xff08 这里自定义Description注解 xff09 package com ann test import java lang annotation Documented import