java自定义注解实现「建议收藏」

引言去杭州第一面试的时候问及到自定义注解,那时候不清楚,现在简单写下,算是对过去的一个交代。自定义注解关于注解的定义这里就不解释了,下面直接来看java提供的四个元注解(作用:负责注释其它注解)。1、@Target(用于描述修饰对象的范围)范围取值于ElementType这个枚举类:ANNOTATION_TYPE(注释…

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

引言

        去杭州第一次面试的时候问及到自定义注解,那时候不清楚,现在简单写下,算是对过去的一个交代。

自定义注解

        关于注解的定义这里就不解释了,自定义注解的场景有很多,比如登录、权限拦截、日志、以及各种框架,下面我们就一起来了解下具体如何实现,下面直接来看java提供的四个元注解(作用:负责注释其它注解)。

        1、@Target(用于描述修饰对象的范围)

        范围取值于ElementType这个枚举类:

        ANNOTATION_TYPE(注释类型声明

        CONSTRUCTOR(构造方法声明)

        FIELD (字段声明)

        LOCAL_VARIABLE(局部变量声明)

        METHOD (方法声明)

        PACKAGE(包声明)

        PARAMETER(参数声明)

        TYPE(类、接口(包括注释类型)或枚举声明)

        2、@Retention(注释类型的注释要保留多久)

         范围取值于RetentionPolicy这个枚举类:

            CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释

            RUNTIME  编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取

            SOURCE 编译器要丢弃的注释

        3、@Document(进行文档转化)

        4、@Inhrited(被标注的类型是被继承的)

示例:

        上面的定义解释比较繁琐,下面来看看一段简单的示例代码,相信立马就可以理解了:

        步骤一:定义两个自定义注解,用来修饰属性,一个标注名字,一个标注性别。   

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

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Name {//名字自定义注解

    public String value() default "";
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Sex {//性别自定义注解

    public enum GenderType {
        Male("男"),
        Female("女");
        private String genderStr;
        private GenderType(String arg0) {
            this.genderStr = arg0;
        }
        @Override
        public String toString() {
            return genderStr;
        }
    }
    GenderType gender() default GenderType.Male;
}

        步骤二:自定义注解标注在属性上

public class Person {

    @Name(value = "cool_summer_moon")
    public String name;
    public String age;
    @Sex(gender = Sex.GenderType.Male)
    public String sex;

    public String getName() { return name; }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

        步骤三:定义一个测试工具类,取刚才标注的属性值

import java.lang.reflect.Field;

public class AnnotionUtils {

    public static String getInfo(Class<?> cs){
        String result = "";
        Field[] declaredFields = cs.getDeclaredFields();
        for (Field field : declaredFields){
            if(field.isAnnotationPresent(Name.class)){
                Name annotation = field.getAnnotation(Name.class);
                String value = annotation.value();
                result += (field.getName() + ":" + value + "\n");
            }
            if(field.isAnnotationPresent(Sex.class)){
                Sex annotation = field.getAnnotation(Sex.class);
                String value = annotation.gender().name();
                result += (field.getName() + ":" + value + "\n");
            }
        }
        return result;
    }

    public static void main(String[] args){
        String info = getInfo(Person.class);
        System.out.println(info);
    }
}

        运行上面程序,结果如下:

name:cool_summer_moon
sex:Male

结束语

        到此,自定义注解的基本功能已经讲解结束了,那么如何利用自定义注解进行权限拦截就留给大家去实现了。

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

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

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


相关推荐

  • git 回滚到指定版本_git回滚多了怎么办

    git 回滚到指定版本_git回滚多了怎么办我们在GIT操作项目时,往往会遇到很多需要回滚的代码。我们可以回滚到任意之前的版本,case如下:1.首先找到你需要回滚的版本号,可以通过日志查看命令行:gitlog-32.选择上图红色箭头执行的commit版本号,第一个时最后提交的,我们回滚到第二个commit:f3eb8f9df34dc6ba47e477e05c8772a62d653fbb命令行:gitr

    2025年7月29日
    1
  • leetcode-1830. 使字符串有序的最少操作次数(数位dp+逆元+快速幂+排列)「建议收藏」

    leetcode-1830. 使字符串有序的最少操作次数(数位dp+逆元+快速幂+排列)「建议收藏」给你一个字符串 s (下标从 0 开始)。你需要对 s 执行以下操作直到它变为一个有序字符串:找到 最大下标 i ,使得 1 <= i < s.length 且 s[i] < s[i – 1] 。找到 最大下标 j ,使得 i <= j < s.length 且对于所有在闭区间 [i, j] 之间的 k 都有 s[k] < s[i – 1] 。交换下标为 i – 1​​​​ 和 j​​​​ 处的两个字符。将下标 i 开始的字符串后缀反转。请你返回将字符串变成有序

    2022年8月9日
    8
  • linux解压tar命令

    linux解压tar命令linux解压tar命令tar命令tar[-cxtzjvfpPN]文件与目录….参数:-c:建立一个压缩文件的参数指令(create的意思);-x:解开一个压缩文件的参数指令!-t:查看tarfile里面的文件!特别注意,在参数的下达中,c/x/t仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。-z:是否同时具有gzip的属性?亦即…

    2022年6月18日
    34
  • 这10个Redis使用技巧,提升90%工作效率(建议收藏)

    前言 Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路。随之而来的一系列最佳实践…

    2021年6月23日
    69
  • windows远程桌面和teamviewer_windows远程桌面端口

    windows远程桌面和teamviewer_windows远程桌面端口Windows的远程桌面输错了一次密码,然后就怎么都连接不上了,查了半天发现傻缺360会默认屏蔽Windows的远程桌面和数据库连接…..大家没事都卸载了360吧转载于:https://www.cnblogs.com/JiangOil/p/10561828.html…

    2025年11月19日
    6
  • 宝塔面板配置及部署javaweb教程(全网最全)

    宝塔面板配置及部署javaweb教程(全网最全)配置宝塔面板javaweb运行环境详解1.准备:(解析成功的域名,本地运行完好的项目,宝塔面板)解析按照阿里的教程一步一步来,不会出错,非常简单,有问题的自行百度2.登陆宝塔面板配置环境安装必备软件这里推荐安装Nginxweb服务器,感觉Apache要没落了,安装都是一键式安装,除了图示的软件之外,还需下载phpMyadmin(用来管理数据库,配套下载php5.3)另外,在选择to…

    2022年6月22日
    81

发表回复

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

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