我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JAVA自定义注解详情

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JAVA自定义注解详情

原理:

注解的本质是继承Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类.而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象Proxy1,通过动态代理对象,调用自定义注解(接口)的方法,最终会调用AnnotationInvocationHandler 的invoke方法.

元注解:

  • @Documented:是否将注解包含到JavaDoc中
  • @Retention:什么时候使用该注解,表明注解的生命周期
  • @Target:注解用于什么地方
  • @Inherited:是否允许子类继承改注解

@Retention参数讲解:

RetentionPolicy.SOURCE:在编译阶段丢弃,这些注解在编译结束后就不会再有意义,所以它不会写入字节码.比如@Override, @SuppressWarnings都属于这类注解。

RetentionPolicy.CLASS:在类加载的时候丢弃, 包含在类文件中

RetentionPolicy.RUNTIME:包含在类文件中,在运行时可以被获取到

@Target:参数讲解:

ElementType.TYPE:用于类,接口,枚举

ElementType.FIELD:应用于属性

ElementType.METHOD:应用于方法

ElementType.PARAMETER:用于方法的形式参数

ElementType.CONSTRUCTOR:用于构造函数

ElementType.LOCAL_VARIABLE:应用于局部变量

ElementType.ANNOTATION_TYPE:应用于注解类型

ElementType.PACKAGE:应用于包

ElementType.TYPE_PARAMETER:应用于类型变量(1.8新增)

ElementType.TYPE_USE:1.8版本新增,应用于任何使用类型的语句中

案例:

给一个类的String属性设置默认值


@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ObjectFlag {
    //默认值
    String value() default "默认值1";
}

public class ObjectTest {
    @ObjectFlag
    String name;
    @ObjectFlag
    Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

public class ObjectRun {
  public static <T> T setValueField(T t) throws IllegalAccessException {
        Class<?> cls = t.getClass();
        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {
            boolean hasConfigField = field.isAnnotationPresent(ObjectFlag.class);
            field.setAccessible(true);//设置可以访问私有变量
            //若属性上有注解,使用注解的值作为key去配置文件中查找
            if (hasConfigField) {
                //获取注解的默认值
                Object annoValue = field.getAnnotation(ObjectFlag.class).value();
                System.out.println("当前的属性名称为:" + field.getName());
                System.out.println("当前属性类型:" + field.getGenericType().toString());
                //获取到属性的数据类型
                String type = field.getGenericType().toString();
                if (type.endsWith("String")) {//如果是字符串类型
                    field.set(t, annoValue.toString());
                }
            } else {  //若属性上没有注解,则使用属性名作为key去配置文件中查找
                System.out.println("属性" + field.getGenericType().toString() + "没有该注解");
            }
        }
        return t;
    }
}

运行结果:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之际的更多内容!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JAVA自定义注解详情

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java自定义注解的详解

Java自定义注解Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容。在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解。Java1.5引入了注解,当前许多java框架中大量使用
2023-05-31

java中怎么自定义注解详解

在Java中,可以使用`@interface`关键字来定义注解。自定义注解的语法如下:public @interface CustomAnnotation {String value() default "";int number() d
java中怎么自定义注解详解
2023-10-28

详解Java中自定义注解的使用

Annontation是Java5开始引入的新特征,中文名称叫注解,它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。本文主要介绍了自定义注解的使用,希望对大家有所帮助
2023-03-20

Java教程:JAVA自定义注解

注解概念注解是Java SE 5.0版本开始引入的概念,它是对java源代码的说明,是一种元数据(描述数据的数据)。注解和注释的不同注释注释是对代码的说明,给代码的读者看,便于帮读者梳理业务逻辑;在程序代码中经常看到的以@ 开头的大部分是注
2023-06-02

Java怎么自定义注解

这篇文章主要介绍“Java怎么自定义注解”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java怎么自定义注解”文章能帮助大家解决问题。注解注解为我们在代码中添加信息提供一种形式化的方法,使我们可以在
2023-07-05

如何在Java中自定义注解

这篇文章给大家介绍如何在Java中自定义注解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、自定义注解格式分析 Java 中自带的 @Override 注解 , 源码如下 :@Target(ElementType.M
2023-06-15

简单谈谈java自定义注解

Java在1.5开始引入了注解,目前流行的框架都在用注解,可想而知注解的强大之处。以下通过自定义注解来深入了解java注解。一、创建自定义注解package com.sam.annotation;import java.lang.annot
2023-05-31

Java怎么实现自定义注解

本文小编为大家详细介绍“Java怎么实现自定义注解”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现自定义注解”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。概念概念:说明程序的。给计算机看的注释:用
2023-07-02

Java注解怎么自定义使用

这篇文章主要介绍了Java注解怎么自定义使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java注解怎么自定义使用文章都会有所收获,下面我们一起来看看吧。注解注解基本介绍注解概述:Java 注解(Annota
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录