二十一 JDK注解注解案例
什么是注解?
- 注解和接口,类属于同一个级别
- 注解可以在变量、方法、类上加载
- 注解可以有属性也可以没有属性
- 注解是有作用范围(源码、编译期间,运行期间)
- 源码期间:例如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注解注解案例相关推荐
- java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet...
一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...
- SpringBoot从入门到精通教程(二十七)- @Valid注解用法详解+全局处理器Exception优雅处理参数验证用法
问题痛点 用 Spring 框架写代码时,写接口类,相信大家对该类的写法非常熟悉.在写接口时要写效验请求参数逻辑,这时候我们会常用做法是写大量的 if 与 if else 类似这样的代码来做判断,如下 ...
- 【java】JDK中注解的底层实现
1.概述 转载:JDK中注解的底层实现 前提 用Java快三年了,注解算是一个常用的类型,特别是在一些框架里面会大量使用注解做组件标识.配置或者策略.但是一直没有深入去探究JDK中的注解到底是什么,底 ...
- java 案例 一千例,【发现问题、解决问题系列案例分享(二十一)】 一个自动执行命令,每天节省一千分钟!...
原标题:[发现问题.解决问题系列案例分享(二十一)] 一个自动执行命令,每天节省一千分钟! 编辑 | 林采依 撰文 |钱奕昀 嘉定局 在用户信息安全检测中,营业厅电脑因受理业务时需使用安真通 无纸化拍 ...
- nCode:DesignLife案例教程二十一
nCode:DesignLife 案例二十一--DesignLife中有限元模型的动画 21.1 案例文件 21.2 背景 21.3 分析流程 21.4 添加动画分析引擎 21.5 在FEDispla ...
- OpenCV C++案例实战二十一《制作视频播放器》
OpenCV C++案例实战二十一<制作视频播放器> 前言 一.源码 二.效果 总结 前言 本文将使用OpenCV C++ 制作简易视频播放器,用于实现视频播放基本功能. 1.通过创建滑动 ...
- 2021年大数据Hive(十二):Hive综合案例!!!
全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive综合案例 一.需求描述 二.项目表的字段 三.进 ...
- 【Java 注解】自定义注解 ( 注解解析 )
文章目录 一.定义注解 二.使用注解 三.解析注解 四.通过注解对象获取注解属性的原理 在 [Java 注解]自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ; 在 [Java 注解] ...
- python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
#2018-04-06 13:52:30 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘课程]二十一.朴素贝叶斯分类器详解及中文文本舆 ...
最新文章
- java.lang.OutOfMemoryError: Java heap space解决方法
- 《精通Linux设备驱动程序开发》——1.5 Linux发行版
- AndroidOrientation Sensor(方向传感器),新的替代方法详解(安卓官方提供)
- boost::hana::maximum用法的测试程序
- SPF难以解决邮件伪造的现状以及方案
- VS 调用外部DLL时提示“无法嵌入互操作类型”
- oracle 11g12c(pdbcdb)系统巡检
- 联想开机启动项按哪个_win7系统如何修改系统启动项 win7系统修改系统启动项方法【步骤】...
- python的egg包的安装和制作]
- HDU 1429--胜利大逃亡(续)【BFS amp;amp; 状态压缩】
- Java的arrays运用
- SystemConfiguration 简介
- Spring Security完成安全认证
- 怎么把html文档转换成wps,怎么把wps文档转换成word文档
- SolidWorks+thonny esp32 电磁控制,程序算法搞起来了,我的结构-仿真-电磁-控制-算法的学习之路
- 点赞转发双10w+,这些视频号如何打造爆款?
- Lambda表达式的学习
- Simple Factory
- 斐波那契数列的前N项和
- android Button美化
热门文章
- atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型执行期获得Dialect
- CNN中的卷积核及TensorFlow中卷积的各种实现
- 关于SQLSERVER2012版本远程登录问题
- sql点滴41—MyISAM 和 InnoDB 讲解
- 【转】8 个效果惊人的 WebGL/JavaScript 演示
- S2-MLPV2:目前最强的视觉MLP架构,空降榜一,达到83.6% Top-1准确率
- CVPR 2021 | 又好又快的视频异常检测,引入元学习的动态原型学习组件
- Github Star 8.4K,超级好用的OCR数据合成与半自动标注工具,强烈推荐!
- StyleGAN进化过程详解
- 一张图带你了解python