简单实现自定义注解

简介: 在Java中创建自定义注解创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号。注意以下几点:·注解方法不能有参数。·注解方法的返回类型局限于原始类型,字符串,枚举,注解,或以上类型构成的数组。

在Java中创建自定义注解

创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号。
注意以下几点:

·注解方法不能有参数。
·注解方法的返回类型局限于原始类型,字符串,枚举,注解,或以上类型构成的数组。
·注解方法可以包含默认值。
·注解可以包含与其绑定的元注解,元注解为注解提供信息,有四种元注解类型:

  1. @Documented – 表示使用该注解的元素应被javadoc或类似工具文档化,它应用于类型声明,类型声明的注解会影响客户端对注解元素的使用。如果一个类型声明添加了Documented注解,那么它的注解会成为被注解元素的公共API的一部分。

  2. @Target – 表示支持注解的程序元素的种类,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上。

  3. @Inherited – 表示一个注解类型会被自动继承,如果用户在类声明的时候查询注解类型,同时类声明中也没有这个类型的注解,那么注解类型会自动查询该类的父类,这个过程将会不停地重复,直到该类型的注解被找到为止,或是到达类结构的顶层(Object)。

  4. @Retention – 表示注解类型保留时间的长短,它接收RetentionPolicy参数,可能的值有SOURCE, CLASS, 以及RUNTIME。

以下是一个简单自定义注解的实现过程:

首先创建自定义注解类Annotations,代码如下:

package com.dalaoyang.test;

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

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Annotations {
    long time() default -1;
}

写一个简单的实现类:

package com.dalaoyang.test;


import java.util.Date;

/**
 * @author dalaoyang
 * @Description
 * @project java_custon_annotations
 * @package com.dalaoyang.test
 * @email 397600342@qq.com
 * @date 2018/3/27
 */
public class DoSomeThing {
    public void test() {
        System.out.println("执行自定义注解");
        System.out.println("执行自定义注解结束时间:"+new Date());

    }
}

然后写一个使用注解的类:

package com.dalaoyang.test;


public class Test {

    private DoSomeThing doSomeThing= new DoSomeThing();


    @Annotations
    public void test(){
        doSomeThing.test();
    }

}

最后利用反射,使注解可以使用:

package com.dalaoyang.test;


import java.lang.reflect.Method;
import java.util.Date;


// 反射注解
public class AnnotationsRunner {
    public static void main(String[] args) throws Exception {
        System.out.println("执行自定义注解开始时间:"+new Date());
        Class clazz = Test.class;
        Method[] ms = clazz.getMethods();
        for (Method method : ms) {
            boolean flag = method.isAnnotationPresent(Annotations.class);
            if (flag) {
                method.invoke(clazz.newInstance(), null);
            }
        }
    }
}

执行AnnotationsRunner类中得main函数,可以看到控制台如下所示:

image

个人网站:https://dalaoyang.cn

目录
相关文章
|
监控
nagios 主机状态
Nagios的主机有三种状态,分别是UP、DOWN和UNREACHABLE。 其中UP和DOWN很好理解,那么UNREACHABLE到底是什么意思?
3167 0
|
17天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
6416 30
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
2天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
595 136
|
12天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1248 3
|
9天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1105 1
|
19天前
|
人工智能 自然语言处理 供应链
|
10天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
912 5