当前位置: 首页 > news >正文

杭州做网站的好公司滨州企业网站建设

杭州做网站的好公司,滨州企业网站建设,微网站开发公司,wordpress自带主题下载Java注解(Annotation)的基本知识 此文的目的只在于了解的注解的基本知识,知道注解的一些概念,使能够看懂注解的使用。 注解概述 Java 注解(Annotation)又称 Java 标注,使 JDK5.0 引入的一种注释机制。Java 语言中的…

Java注解(Annotation)的基本知识

此文的目的只在于了解的注解的基本知识,知道注解的一些概念,使能够看懂注解的使用。

注解概述

  • Java 注解(Annotation)又称 Java 标注,使 JDK5.0 引入的一种注释机制。
  • Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。

在这里插入图片描述

注解的作用是什么呢?

  • **对 Java 中类、方法、成员变量做标记,然后进行特殊处理,**至于到底作何种处理由业务需求来决定。
  • 例如: JUnit框架中,标记了注解 @Test 的方法就可以被当成测试方法执行,而没有标记的就不能当成测试方法。
  • 代码文档化: 注解可以用来为代码添加说明文档,例如 @Deprecated 标记已弃用的方法或类。
  • 编译时检查: 通过自定义的注解,在编译时进行代码检查,例如检查代码规范、约定等。
  • 运行时处理: 注解可以在运行时被读取并进行处理,例如自定义的业务逻辑、AOP(面向切面编程)等。
  • 框架和库的使用: 许多 Java 框架和库使用注解来配置和控制程序的行为,比如 Spring 框架中的 @Autowired@RequestMapping 等。

自定义注解

自定义注解就是自己做一个注解来使用。

public @interface 注解名称 {public 属性类型 属性名() default 默认值; //其中属性类型 Java 支持的数据类型基本上都支持
}

定义案例:

public @interface TestAnnotation {public String myName() default "xwhking";public String sex() default "man";
}

特殊属性

  • value 属性,如果只有一个 value 属性的情况下,使用 value 属性的时候可以省略 value 名称不写!!
  • 但是如果有多个属性,且多个属性没有默认值,那么 value 名称是不能省略的。

理解一下,这里的 value 指的是在使用注解时的区别,如果注解里面只有一个属性,那么就不需要特别说明,给注解里面注入值,那么就自动注入到该属性了,如果有多个属性,就需要表明是哪一个属性的值。看下面的例子

在这里插入图片描述

因为定义了 TestAnnotation 注解,如果 TestAnnotation 里面只有一个属性,如果只有 myName 的话,那么就不需要写 myName="XXX" 了,直接输入字符串即可,而这里因为有两个属性需要写一下属性名,并且进行对应 value。

元注解

元注解:就是给注解的注解,让我们方便定义注解的注解

元注解有两个:

  • @Target:约束自定义注解只能在那些地方使用
  • @Retention:申明注解的生命周期

@Target

@Target 中可使用的值定义在Element枚举类中,常用值如下

  • TYPE,类、接口
  • FIELD,成员变量
  • METHOD,成员方法
  • PARAMETER,方法参数
  • CONSTRUCTOR,构造器
  • LOCAL_VARIABLE,局部变量

@Retention

@Retention 中可使用的值定义在 RetentionPolicy 枚举类中,常用值如下:

  • SOURCE : 注解之作用在源码阶段,生成的字节码文件中不存在
  • CLASS: 注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值
  • RUNTIME:注解作用在源码、字节码、运行阶段

注解解析

注解的解析

注解的操作中经常需要进行解析,注解的解析就是判断是否存在注解,存在注解就解析出内容。

与注解解析相关的接口

  • Annotation: 注解的顶级接口,注解都是Annotation类型的对象

  • AnnotatedElement:该接口定义了与注解解析相关的解析方法

方法说明
Annotation[] getDeclaredAnnotations()获得当前对象上使用的所有注解,返回注解数组。
T getDeclaredAnnotation(Class annotationClass)根据注解类型获得对应注解对象
boolean isAnnotationPresent(Class annotationClass)判断当前对象是否使用了指定的注解,如果使用了则返回true,否则false
<T extends Annotation> T getAnnotation(Class<T> annotationClass)根据注解类型获得对应注解对象(包括继承关系中的注解)
  • 所有的类成分Class, Method , Field , Constructor,都实现了AnnotatedElement接口他们都拥有解析注解的能力
  • getAnnotation(Class<? extends Annotation> annotationClass) 方法与 getDeclaredAnnotation(Class<T> annotationClass) 方法功能相似,但是 getAnnotation 方法会检查继承链中的注解。如果指定类型的注解存在于继承层次结构中,它会返回该注解;否则,返回 null。

解析注解的技巧

注解在哪个成分上,我们就先拿哪个成分对象。

  • 比如注解作用成员方法,则要获得该成员方法对应的Method对象,再来拿上面的注解
  • 比如注解作用在类上,则要该类的Class对象,再来拿上面的注解
  • 比如注解作用在成员变量上,则要获得该成员变量对应的Field对象,再来拿上面的注解

注解使用实例

上了上面那么多,知道了基本知识,现在我们来做一个实例,加深我们对注解的理解。

  1. 定义一个注解用于检测用户权限
/*** 定义权限控制注解*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PermissionRequired {String checkRole() default "user";
}
  1. 制造一个使用场景
public class UserController {@PermissionRequiredpublic String getUserData(){return "{" +"username:xwhking" +"password:admin123" +"}";}
}
  1. 利用注解对权限校验
public class CheckAuth {public static boolean check(Method method,String userRole){Annotation annotation = method.getAnnotation(PermissionRequired.class);if(annotation != null){String requiredRole  = ((PermissionRequired) annotation).checkRole();if(userRole.equals(requiredRole)){return  true;}}return false;}public static void main(String[] args) throws NoSuchMethodException {if(check(UserController.class.getMethod("getUserData"),"admin")){System.out.println("校验通过");}else{System.out.println("校验不通过!");}}
}

通过运行 CheckAuth 的主程序按照上面的代码运行的话结果是:

在这里插入图片描述

因为上面那个方法用了注解,没有给具体的值所以默认值是 "user" 与给的 "admin"不一致所以不通过。

如果把上面用到注解的地方改为 @PermissionRequired("admin") 再次运行代码就可以通过了。

http://www.yayakq.cn/news/702099/

相关文章:

  • 网站布局设计教程淘宝网站怎么做网站
  • 衡阳网站建设 千度网络网站设计杭州
  • yu网站建设百度网站收录提交
  • 优秀电商设计网站有哪些内容推广百度百科
  • 南宁品牌网站建设企业线上推广公司
  • 建设部网站怎么查岗位人员外贸小语种网站建设
  • 山东省住房建设厅网站上海企业建站公司哪家好
  • 英文网站怎么设计it人力外包服务
  • 诸城市网站建设望牛墩网站仿做
  • 企业网站建设费如何列支襄阳官网建站公司
  • 云南机场建设集团网站动漫网页设计版式
  • 网站策划的知识创建个人网站多少钱
  • 公主岭网站建设规划大学生网页制作作业
  • 哪个做网站公司好公司网站建站公司
  • 北京正规网站建设单价国外h5制作网站
  • 东莞网站网络推广推广公司怎么做
  • 怎么查寻一个网站做的竞价qq群推广网站免费
  • 外贸公司没网站 怎么做业务广西住房与城乡建设厅网站电话
  • 商城网站建设方案 2017汽车网页设计图片
  • 湖南省建设银行网站黑龙江建设网站招聘
  • 一加手机官网网站自己创建app
  • 怎样给网站做 站内搜索国外优秀摄影作品网站
  • 朝阳网站建设多少钱域名备案的网站建设书
  • dedecms 网站做一个官方网站多少钱一个
  • 棋牌推广宁波网站建设seo
  • 做商业网站去哪里弄好wordpress导入有道笔记
  • 网站怎么提高百度权重融资网站开发
  • 创意logo设计图片欣赏镇江百度seo
  • 潮州建设网站做女团学什么舞蹈视频网站
  • 受欢迎的杭州网站建设电商销售渠道有哪些