全面解析Java注解--慕课网笔记

Java网络爬虫基于webMagic爬取X课网所有免费视频信息实例 说到爬虫呢 当然是python最适合干的事 但是java呢 基于这个庞大成熟的生态圈,也有一些不错的爬虫框架可以在实际项目中使用的。 webMagic就是今天的主角 它在github上的start数量达到了近7000 很了不起了 并且这个是我们国人开发的哦。 简单介绍下吧: webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发 项目结构 ... 阅读详情
第1章 概述
1-1 Java注解概述

为什么要学习注解?学习注解有什么好处?学完能做什么?

  1. 能够读懂别人的代码,特别是框架相关的代码
  2. 让编程更加简洁,代码更加清晰
  3. 让别人高看我们一眼

注解在Java1.5引入
Java提供了一种原程序中元素关联任何信息和任何元素的途径和方法

  • Java中的常见注解
  • 注解分类
  • 自定义注解
  • 注解应用实战
第2章 Java中的常见注解
2-1 JDK中的注解

JDK自带注解
- @Override
- @Deprecated
- @Suppvisewarnings

public interface Person {


    public String name();

    public String age();

    @Deprecated
    public void sing();

}
public class Child implements Person{

    @Override
    public String name() {
        return null;
    }

    @Override
    public String age() {
        return null;
    }

    @Override
    public void sing() {

    }

}
public class Test {


    @SuppressWarnings("deprecation")
    public void sing() {
        Person p = new Child();
        p.sing();
    }

}
2-2 Java第三方注解
  • Spring
    • @Autowired
    • @Service
    • @Repository
  • Mybatis
    • @InsertProvider
    • @UpdateProvider
    • @Options
第3章 注解的分类
3-1 Java注解的分类
  • 按照运行机制分
    • 源码注解
      注解只在源码中存在,编译成.class文件就不存在了。
    • 编译时注解
      注解在源码和.class文件中都存在,如@Override、@Deprecated、@Suppvisewarnings
    • 运行时注解
      在运行阶段还起作用,甚至会影响运行逻辑的注解,如@Autowired
  • 按照来源分类
    • 来自JDK的注解
    • 来自第三方的注解
    • 我们自定义的注解

元注解:注解的注解

第4章 自定义注解
4-1 Java自定义注解
  • 自定义注解的语法要求
  • 注解的注解(元注解)
  • 使用自定义注解
  • 解析注解
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description{

    String desc();

    String author();

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

ElementType中有:
- CONSTRUCTOR
- FIELD
- LOCAL_VARIABLE
- METHOD
- PACKAGE
- PARAMETER
- TYPE

RetentionPolicy中有:
- SOURCE
- CLASS
- RUNTIME

@Inherited:允许子类继承
@Doucument:生成javadoc时会包含注解

4-2 使用自定义注解

使用注解的语法:
@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,…)

@Description(desc="I am eyeColor",author="Mooc boy",age=18)
public String eyeColor(){
    return "red";
}
4-3 关于自定义注解的代码演示说明
4-4 解析注解

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

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) {
            e.printStackTrace();
        }
    }

}
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description{

    String value();

//  String author();

//  int age() default 18;
}
@Description("I am interface")
public class Person {

    @Description("I am interface method")
    public String name() {
        return null;
    };

    public String age() {
        return null;
    };

    @Deprecated
    public void sing() {};

}
public class Child extends Person{

    @Override
    public String name() {
        return null;
    }

    @Override
    public String age() {
        return null;
    }

    @Override
    public void sing() {

    }

}
第5章 项目实战
5-1 项目需求

项目说明:项目取自一个公司的持久层框架,用来代替Hibernate的
解决方案,核心代码就是通过注解来实现的。

需求:
1. 有一张用户表,字段包括用户ID,用户名,昵称,年龄,
性别,所在城市,邮箱,手机号。
2. 方便的对每个字段或字段的组合条件进行检索,并打印SQL。
3. 使用方式要足够简单,见代码示例。

5-2 项目实现(上)
5-3 项目实现(下)
public class Test {

    public static void main(String[] args) {

        Filter f1 = new Filter();
        f1.setId(10);//查询id为10的用户

        Filter f2 = new Filter();
        f2.setUserName("lucy");//查询用户为lucy的用户
        f2.setAge(18);

        Filter f3 = new Filter();
        f3.setEmail("liu@sina.com,zh@163.com,77777@qq.com");


        String sql1 = query(f1);
        String sql2 = query(f2);
        String sql3 = query(f3);

        System.out.println(sql1);
        System.out.println(sql2);
        System.out.println(sql3);


        Filter2 filter2 = new Filter2();
        filter2.setAmount(10);
        filter2.setName("技术部");
        System.out.println(query(filter2));
    }

    private static String query(Object f) {
        StringBuilder sb = new StringBuilder();
        //1.获取到class
        Class c = f.getClass();
        //2.获取到table的名字
        boolean exists = c.isAnnotationPresent(Table.class);
        if(!exists) {
            return null;
        }
        Table t = (Table)c.getAnnotation(Table.class);
        String tableName = t.value();
        sb.append("select * from ").append(tableName).append(" where 1=1");
        //3.遍历所有字段
        Field[] fArray = c.getDeclaredFields();
        for (Field field : fArray) {
            //4.处理每个字段对应的sql
            //4.1拿到字段名
            boolean fExists = field.isAnnotationPresent(Column.class);
            if(!fExists) {
                continue;
            }
            Column column = field.getAnnotation(Column.class);
            String columnName = column.value();
            //4.2拿到字段的值
            String filedName = field.getName();
            String getMethodName = "get"+ filedName.substring(0,1).toUpperCase() + 
                    filedName.substring(1);
            Object fieldValue = null;
            try {
                Method getMethod = c.getMethod(getMethodName);
                fieldValue =getMethod.invoke(f, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //4.3拼装sql
            if(fieldValue == null ||
                    (fieldValue instanceof Integer && (Integer)fieldValue == 0)) {
                continue;
            }
            sb.append(" and ").append(filedName);
            if(fieldValue instanceof String) {
                if(((String)fieldValue).contains(",")) {
                    String[] values = ((String)fieldValue).split(",");
                    sb.append(" in(");
                    for (String v : values) {
                        sb.append("'").append(v).append("'").append(",");
                    }
                    sb.deleteCharAt(sb.length()-1);
                    sb.append(")");
                }else {
                    sb.append("=").append("'").append(filedName).append("'");
                }
            }else if(fieldValue instanceof Integer) {
                sb.append("=").append(fieldValue);
            }
        }
        return sb.toString();
    }

}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {

    String value();
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {

    String value();
}
@Table("user")
public class Filter {

        @Column("id")
        private int id;

        @Column("user_name")
        private String userName;

        @Column("nick_name")
        private String nickName;

        @Column("age")
        private int age;

        @Column("city")
        private String city;

        @Column("email")
        private String email;

        @Column("mobile")
        private String mobile;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public String getNickName() {
            return nickName;
        }

        public void setNickName(String nickName) {
            this.nickName = nickName;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }



}
@Table("department")
public class Filter2 {

        @Column("id")
        private int id;

        @Column("name")
        private String name;

        @Column("leader")
        private String leader;

        @Column("amount")
        private int amount;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getLeader() {
            return leader;
        }

        public void setLeader(String leader) {
            this.leader = leader;
        }

        public int getAmount() {
            return amount;
        }

        public void setAmount(int amount) {
            this.amount = amount;
        }


}
第6章 课程总结
6-1 课程总结
  1. 认识注解
  2. 注解作用范围@Target和生命周期@Retention
    • 作用范围:包、类、字段、方法的参数、局部变量
    • 生命周期:源文件SOURCE、编译CLASS、运行RUNTIME
  3. 能读懂注解

《全面解析java注解》视频地址

Java元注解和注解的解析 在使用注解之前,需要了解:一、什么是注解?二、注解是如何产生作用的?而元注解是一个很好的切入点 元注解的源码结构   从java.lang.annotation包截图看,一共定义了6个注解: @Document @Target @Retention @Inherited @Native @Repeatable 其中前4个是元注解 元注解的定义 元注解负责注解自定义注解... 阅读详情

相关推荐

Java 注解技术视频详解

Java 注解技术详解

java 成员 注解_java注解详解

1.了解注解我们有必要对JDK 5.0新增的注解(Annotation)技术进行简单的学习,因为Spring 支持@AspectJ,而@AspectJ本身就是基于JDK 5.0的注解技术。所以学习JDK 5.0的注解知识有助于我们更好地理解和掌握Spring的AOP技术。对于Java开发人员来说,在编写代码时,除了源程序以外,我们还会使用 Javadoc标签对类、方法或成员变量进行注释,以便使...

weixin_35716518的博客 573

Pcileech(DMA)开源项目简述

希望大DMA家能正确认识FPGA,正确使用DMA技术,对于市场上各类伪装成花里胡哨设备的FPGA板卡它的本质是不会变的,不要上当受骗。

2301_79773847的博客 5963

[笔记]Java注解全面解析

JAVA注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 1.注解分类1.1按照运行机制分类 源码注解 注解只在源码中存在,编译成.class文件就不存在了 编译时注解 注解在源码和.class文件中都存在

代码有毒的博客 1242

loadStop的原因导致的SSUSP

Total内存值是可用来调度的可用内存,当前可用内存为 0M。 loadSched和loadStop的阈值是根据 Total 内存和节点内存来做限制的。 loadStop 50G,现在有大量作业SSUSP,说明之前某个时间点该节点内存可能有低于50G的时候,导致作业SSUSP,具体是否是这个原因引起的需要用 bjobs -l JobID 看下作业的详细信息。 如果是loadStop的原因导致的 SSUSP,根据loadStop设置的阈值,Total 值高于loadStop值后,将逐步恢复挂起的作业

Blueberry521的博客 666

Anaconda安装教程(超详细版)

目录 一、Anaconda简介 二、运行环境 三、安装Anaconda 四、手动配置环境变量(重点) 五、测试Anaconda环境是否配置成功 一、Anaconda简介 Anaconda,一个开源的Python发行版本,可用于管理Python及其相关包,包含了conda、Python等180多个科学包及其依赖项。 二、运行环境 Windows11 (Window10用户亦可参考,仅环境变量打开位置不同)。 三、安装Anaconda (1)百度“Anaconda”或者输入网址

m0_61607990的博客 22万+

注解的一些学习与理解

注解的一些学习与理解 注解 jdk5之后提供了一个特性,和类 接口同级 格式: @interface 注解名{} 作用: 编译检查 替代配置文件 定义注解(元注解:注解上的注解) 分析代码(用到反射) java中3个注解 @Override:声明该方法是从分类上继承过来的,执行编译期的检查 @SuppressWarnings:抑制警告 值有很多,只需要知道一个 all ...

skye_error的博客 228

Nvidia Jetson平台 JP4.2.1版本GStreamer视频采集异常问题调试记录

Nvidia Jetson平台GStreamer in JP4.2.1不能采集但是 v4l2-ctl和 ffmpeg能正常采集视频。

jzwjzw19900922的博客 2124

java中文注释视频_全面解析Java注解的视频教程资料推荐

在项目开发中,注解的使用无处不在。注解的使用简化了代码,减少了程序员的工作量。本课程带领小伙伴们全面认识Java的注解,包括为什么使用注解、Java中的常见注解、注解的分类和如何自定义注解,最后通过一个实战案例来演示注解在实际项目中的应用。该老师讲课风格:教师讲课深入浅出,条理清楚,层层剖析,环环相扣,论证严密,结构严谨,用思维的逻辑力量吸引学生的注意力,用理智控制课堂教学进程。学生通过听教师的讲...

weixin_39782545的博客 197

Python高阶爬虫:逆向工程模拟Wind/同花顺等金融终端数据抓取

本文详细阐述了模拟金融数据终端进行数据抓取的全套技术方案。我们从法律合规性讲起,选择了Playwright作为核心自动化工具,通过两个实战案例(同花顺网页版和Wind桌面版)演示了从分析、模拟到数据解析的完整流程,并进一步介绍了构建健壮爬虫系统所需的高级技巧。我们的策略是:启动一个由Playwright控制的浏览器,模拟真人登录,然后监听所有网络请求,从中过滤出我们需要的那个数据API。if key in ['f43', 'f169', 'f170', 'f46', 'f60']: # 价格类字段。

2201_76125261的博客 546

计算机视觉 | 面试题:01、过拟合和欠拟合的表现与解决方法

问题 过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合,还有一种是适度拟合,适度拟合就是我们模型训练想要达到的状态,不过适度拟合这个词平时真的好少见,在做酷狗音乐的笔试题时还懵逼了一会,居然还真的有这样的说法。 这应该是基础中的基础了,笔试题都做烂了。那就当做今天周末,继续放个假吧…… 过拟合 过拟合的表现 模型在训练集上的表现非常好,但是在测试集、验证集以及新数据上的表现很差,损失曲线呈现一种高方差状态。(高方差指的是训练集误差较低,而测试集误差比训练集大较多) 过拟合的原因 从两个角度去分析

Mrrunsen的博客 868

慕课网 全面解析java注解

学习注解的目的: 1、能够读懂别人的代码,特别是框架相关的代码 2、让编程更加简介,代码更加清晰 3、让别人高看一眼 注解概念: 1.5提供了源程序中元素关联任何信息和任何元数据的途径和方法 JDK自带注解: 1. @Override 覆盖了父类的方法 2. @Deprecated表示方法已经过时, 3. @SuppressWarnings("deprecatio

yuhan_9204的专栏 870

12、激光制造中人工智能与机器学习的应用及挑战

本文探讨了人工智能与机器学习在激光制造中的应用,重点分析了图像分类技术在质量检测中的多种方法及其性能对比,包括基于贝叶斯分类、卷积神经网络(CNN)和多尺度CNN的技术。同时,文章指出了AI在激光制造中面临的五大挑战:鲁棒性、安全性、可解释性、责任归属和可预测性,并提出了相应的解决思路。此外,还介绍了激光制造的主要应用技术如切割、焊接和增材制造的流程、优势与局限性,并通过对比表格直观展示不同技术的特点。最后展望了未来激光制造向智能化、自动化和可持续化发展的趋势。

rgv234567的博客 138

慕课网 Java注解 学习笔记

注解的作用: 能够读懂别人写的代码,特别是框架相关的的代码让变成更加简洁,代码更加清晰让别人高看一眼 不懂注解就不能说学过Spring,mybatis  Java 1.5 开始引入注解。 注解概念: Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法。 Java常见的注解 JDK 自带注解: @Override  @Deprecate

linyk3的专栏 555

知识库构建革命:基于Agent的智能检索系统设计

本文聚焦“基于Agent的智能检索系统”这一前沿技术,系统讲解其设计逻辑、核心技术与落地方法。我们将覆盖从基础概念(如Agent如何“理解”知识)到实战代码(如何用Python搭建原型系统)的全链路内容,帮助技术开发者、企业知识管理负责人理解这一技术为何能颠覆传统知识库。本文将按“问题引入→核心概念→技术原理→实战落地→未来趋势”的逻辑展开:先用“老图书馆的困境”故事引出传统知识库的问题;再用“智能图书管理员”类比解释Agent如何革新检索;接着拆解NLP、对话管理、知识推理等核心技术;

AI智能探索者的博客 728

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

慕课网《全面解析Java注解》教程总结

听了幕课网中《全面解析Java注解》教程,本文是对该教程的总结与回顾。一、定义Java提供了一种原程序中的元素关联任务信息和任何元素的途径与方法。乍一看这个概念,我反正是没看懂,不知道您是否看懂了。但是@override这个您总认识吧,这个就是注解。二、分类本教程对Java注解是按以下两个维度进行分类的:第一类:按运行机制分类 源码注解:这类注解只存在于源码之中,编译后的Class文件里不存在编译时

northleaf的博客 2951

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java注解全面解析

推荐阅读:  我的优快云  我的博客园  QQ群:704621321  我的个人博客 一。全面解析Java注解 1.为什么学习Java注解?学习Java注解有何好处?学完能做什么? (1)能·读懂别人写的代码,特别是框架相关的代码 (2)让编程更加简洁,代码更加清晰 (3)让别人高看一眼 2.Java注解概念 Java提供了一种源程序中的元素任...

爱上游戏开发 2659

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

全面解析JAVA注解

全面解析java注解: 注:本文部分内容来自慕课网 1. 先给个注解例子,下面箭头标出的即是java注解: java注解 2. 在看这篇文章之前,你肯定心里有疑问, 为什么要学习注解? 注解有什么用? 学完注解又有什么用呢? 1.能够读懂别人写的代码,特别是框架相关的代码 2.让编程更加简洁,代码更加清晰 3.让别人高看我们一眼,证明自己学过Spring,学过Mybatis等,尤...

Liuqz2009的专栏 528

Java注解之解析注解

在《Java注解之基本语法》中我们详细说明了Java中注解的基本语法,也通过一个简单的例子演示了一个简单的注解是怎么定义和使用的。我们知道,在实际的业务开发中,简单的会这点东西是远远不够的。在实际开发中我们定义的注解一般会有实际的逻辑意义,可以在运行时改变程序的执行逻辑,下面就接上上一篇文章讲解在Java中解析注解。这里主要分为两个部分进行讲解:类注解解析、方法注解解析。 1. 类注解解析 类...

I_LV_XJ的博客 970

【Java 注解】自定义注解 ( 注解解析 )

一、定义注解、 二、使用注解、 三、解析注解、 四、通过注解对象获取注解属性的原理、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2186

Java Annotation注解实现原理深度解析

本文深入解析Java注解技术,从基础概念到实现原理,结合印象笔记实际场景进行实战应用。首先区分注解与注释的本质差异,介绍JDK内置注解分类及元注解的核心作用。重点剖析注解的反射解析机制,通过流程图展示生命周期和执行流程。最后实战开发两个自定义注解:@NoteAnnotation标注笔记类型和创建人,@TaskAnnotation管理任务状态和截止时间,完整演示注解定义、使用和反射解析的全过程,帮助开发者掌握注解技术的核心应用。

weixin_43829708的博客 1296

Java注解的解析

又比如,要解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解。比如要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解。定义一个类叫Demo:在类中定义一个go方法,并在该类和其他方法上使用MyTest注解。就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容解析出来。定义一个AnnotationTest测试类,解析Demo类中的全部注解。主要思想:要解析谁上面的注解,就应该先拿到谁。

m0_73592039的博客 938

Java-注解解析

Java-注解 文章目录Java-注解一、定义1.1 作用二、预定义注解三、自定义注解3.1 格式3.2 本质3.3 注解内的属性3.4 元注解四、注解解析 一、定义 注解(Annotation),也叫元数据。一种代码级别的说明。JDK1.5之后引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 1.1 作用 ①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】 ②代码分析:通过代码里标识的注解对代码进行分析

你的博客 4027

Java | 自定义注解及解析

先来看内置注解@Override是怎么被定义的,它位于@Target定义声明注解的作用域(作用在类上还是方法上),@Retention定义注解在哪个级别可用,在源代码中(SOURCE)、类文件中(CLASS)、还是运行时(RUNTIME除了还有及@Inherited元注解作用@Target表示注解作用在什么地方,声明在构造器、FIELD域声明、METHOD方法声明、PACKAGE包声明、TYPE类、接口或者enum声明、PARAMETER参数声明、局部变量声明@Retention。

小马快跑的博客 9437

全面解析Java注解

1.  了解注解 我们有必要对JDK 5.0新增的注解(Annotation)技术进行简单的学习,因为Spring 支持@AspectJ,而@AspectJ本身就是基于JDK 5.0的注解技术。所以学习JDK 5.0的注解知识有助于我们更好地理解和掌握Spring的AOP技术。 对于Java开发人员来说,在编写代码时,除了源程序以外,我们还会使用Javadoc标签对类、方法或成员变量进行注释,

软件设计专栏 6044

Java注解深度解析

注解(Annotation)是Java 5引入的元数据机制,本质是继承的接口。代码级文档说明:替代XML配置,提升代码可读性编译期检查:强制执行代码规范(如@Override)运行时动态处理:支撑框架的依赖注入和AOP实现代码生成支持:Lombok等工具的核心机制面试重点:理解注解的三种保留策略(SOURCE/CLASS/RUNTIME)及其对应的生命周期是面试常见考点/*** 权限校验注解定义* - 运行时保留策略* - 适用于方法级别* - 包含角色列表和权限等级两个元素*/

weixin_69477306的博客 1089
上一篇: 反射——慕课网笔记
下一篇: JDBC(一)--慕课网笔记
lmjun3
博客等级 码龄11年 78粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值