什么是注解?

  • 注解和接口,类属于同一个级别
  • 注解可以在变量、方法、类上加载
  • 注解可以有属性也可以没有属性
  • 注解是有作用范围(源码、编译期间,运行期间)
    • 源码期间:例如String类上@Author  @since  , 使用javac命令将当前源码生成帮助文件,可以识别String类上的注解
    • 编译期间:@Override 、@SuppressWarnings 、 @Deprecated,告诉编译器部分信息
    • 运行期间:@Test    Junit会运行包含@Test注解的方法

@Test(timeout=1000)  //单元测试,超过1ms则报异常

@Override  //重写父类的方法

@SuppressWarnings({ "rawtypes", "unused" }) //抑制编译器警告,如果有变量未使用,未遵循泛型格式错误不报警告

@Deprecated  //声明一下方法过时,不建议使用

@Retention(RetentionPolicy.RUNTIME)  //定义注解的时候,需要通过元注解说明当前自定义注解的作用,此注解在运行期间有效

@Target(ElementType.METHOD)  //定义注解的时候,需要通过@Target说明目标对象

注解的作用:

  • 编译检查
  • 配置
  • 生成帮助文档

什么时候用注解来做配置?

如果配置信息不会发生的修改,例如servlet路径,建议使用注解的形式

如果配置信息需要发生频繁的修改,例如数据库的用户名和密码信息,

建议采用传统方法 (.txt , .properties , .xml)

自定义注解

格式:

  • public @interface 注解名称{

    //在注解中定义一个属性
    public 属性类型 属性名称() default 默认值;

  • public long timeout() default -1;

    }

支持的类型:

注解支持的类型有:基本数据类型(4类8种),String,Class,Annotation,Enumeration,以及以上类型的一维数组类型

注解作用:配置

配置:开发的时候部分信息不希望写死在程序中,例如数据库的用户名和密码,可以将其存放在.txtr,properties,xml文件中

    注解在后期的作用主要做配置

框架开发中,一般提供两种方式:xml和注解

案例:模拟Junit

1 自定义注解@MyTest

  通过元注解声明作用域和目标对象,否则运行期间无法通过反射获取到注解信息

2 定义UserDao,里面有四个方法,加上注解

3 编写测试类进行测试

将UserDao.class文件通过反射加载到内存

获取到字节码文件上的所有方法

判断方法上是否有注解,如果有,则执行该方法。

MyTest

package com.test02;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;//定义注解的时候,需要通过元注解说明当前自定义注解的作用
//注解在运行期间有效
@Retention(RetentionPolicy.RUNTIME)
//定义注解的时候,需要通过@Target说明目标对象
@Target(ElementType.METHOD)
public @interface MyTest {//在MyTest注解中定义成员属性,属性为-1public long timeout() default -1;
}

UserDao

package com.test02;public class UserDao {static{System.out.println("加载UserDao静态代码块");}@MyTestpublic void addUser(){System.out.println("增加用户");}@MyTestpublic void delUser(){System.out.println("删除用户");}@MyTestpublic void uptUser(){System.out.println("更新用户");        }@MyTestpublic void getUser(){System.out.println("得到用户");}
}

测试类

package com.test02;import java.lang.reflect.Method;public class MyJunit {public static void main(String[] args) throws Exception {// 加载UserDao.class字节码文件中的方法,判断哪些方法上有自定义的注解@MyTest并执行// 1 将UserDao.class字节码文件加载到内存,class对象(字节码文件在内存中的对象)Class clazz = Class.forName("com.test02.UserDao");// 2 获取字节码对象上所有的方法,数组中的每一个元素都代表method对象(相当于字节码中的每一个方法)Method[] methods = clazz.getMethods();// 遍历每个方法for (Method method : methods) {// System.out.println(method.getName());// 判断方法上是否有@MyTest注解// System.out.println(method.isAnnotationPresent(MyTest.class));if (method.isAnnotationPresent(MyTest.class)) {// 如果有@MyTest注解,执行,否则忽略method.invoke(new UserDao());}}}
}

转载于:https://www.cnblogs.com/ltfxy/p/10259609.html

二十一 JDK注解注解案例相关推荐

  1. java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet...

    一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...

  2. SpringBoot从入门到精通教程(二十七)- @Valid注解用法详解+全局处理器Exception优雅处理参数验证用法

    问题痛点 用 Spring 框架写代码时,写接口类,相信大家对该类的写法非常熟悉.在写接口时要写效验请求参数逻辑,这时候我们会常用做法是写大量的 if 与 if else 类似这样的代码来做判断,如下 ...

  3. 【java】JDK中注解的底层实现

    1.概述 转载:JDK中注解的底层实现 前提 用Java快三年了,注解算是一个常用的类型,特别是在一些框架里面会大量使用注解做组件标识.配置或者策略.但是一直没有深入去探究JDK中的注解到底是什么,底 ...

  4. java 案例 一千例,【发现问题、解决问题系列案例分享(二十一)】 一个自动执行命令,每天节省一千分钟!...

    原标题:[发现问题.解决问题系列案例分享(二十一)] 一个自动执行命令,每天节省一千分钟! 编辑 | 林采依 撰文 |钱奕昀 嘉定局 在用户信息安全检测中,营业厅电脑因受理业务时需使用安真通 无纸化拍 ...

  5. nCode:DesignLife案例教程二十一

    nCode:DesignLife 案例二十一--DesignLife中有限元模型的动画 21.1 案例文件 21.2 背景 21.3 分析流程 21.4 添加动画分析引擎 21.5 在FEDispla ...

  6. OpenCV C++案例实战二十一《制作视频播放器》

    OpenCV C++案例实战二十一<制作视频播放器> 前言 一.源码 二.效果 总结 前言 本文将使用OpenCV C++ 制作简易视频播放器,用于实现视频播放基本功能. 1.通过创建滑动 ...

  7. 2021年大数据Hive(十二):Hive综合案例!!!

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive综合案例 一.需求描述 二.项目表的字段 三.进 ...

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

    文章目录 一.定义注解 二.使用注解 三.解析注解 四.通过注解对象获取注解属性的原理 在 [Java 注解]自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ; 在 [Java 注解] ...

  9. python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析

    #2018-04-06 13:52:30 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘课程]二十一.朴素贝叶斯分类器详解及中文文本舆 ...

最新文章

  1. java.lang.OutOfMemoryError: Java heap space解决方法
  2. 《精通Linux设备驱动程序开发》——1.5 Linux发行版
  3. AndroidOrientation Sensor(方向传感器),新的替代方法详解(安卓官方提供)
  4. boost::hana::maximum用法的测试程序
  5. SPF难以解决邮件伪造的现状以及方案
  6. VS 调用外部DLL时提示“无法嵌入互操作类型”
  7. oracle 11g12c(pdbcdb)系统巡检
  8. 联想开机启动项按哪个_win7系统如何修改系统启动项 win7系统修改系统启动项方法【步骤】...
  9. python的egg包的安装和制作]
  10. HDU 1429--胜利大逃亡(续)【BFS amp;amp; 状态压缩】
  11. Java的arrays运用
  12. SystemConfiguration 简介
  13. Spring Security完成安全认证
  14. 怎么把html文档转换成wps,怎么把wps文档转换成word文档
  15. SolidWorks+thonny esp32 电磁控制,程序算法搞起来了,我的结构-仿真-电磁-控制-算法的学习之路
  16. 点赞转发双10w+,这些视频号如何打造爆款?
  17. Lambda表达式的学习
  18. Simple Factory
  19. 斐波那契数列的前N项和
  20. android Button美化

热门文章

  1. atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型执行期获得Dialect
  2. CNN中的卷积核及TensorFlow中卷积的各种实现
  3. 关于SQLSERVER2012版本远程登录问题
  4. sql点滴41—MyISAM 和 InnoDB 讲解
  5. 【转】8 个效果惊人的 WebGL/JavaScript 演示
  6. S2-MLPV2:目前最强的视觉MLP架构,空降榜一,达到83.6% Top-1准确率
  7. CVPR 2021 | 又好又快的视频异常检测,引入元学习的动态原型学习组件
  8. Github Star 8.4K,超级好用的OCR数据合成与半自动标注工具,强烈推荐!
  9. StyleGAN进化过程详解
  10. 一张图带你了解python