Java注解基本介绍
注解(Annotation),又称元数据(MetaData),提供了一种在代码中添加信息的形式化的方法,将元数据和源代码结合在一起。
1. 外部配置文件如XML存在的问题:
- 代码复杂度较高,需要编写很多重复信息,如包名和全类名,而这些信息在源文件中都已经存在了。
- 可能需要同时维护源文件和XML,如添加了新的注入对象,可能导致代码同步问题。
要求程序员了解如何编写XML文件。
使用注解则只需要在代码源文件中进行编写维护简单的注解标识,而其它信息都能从这个源文件获取到。
2. Java内置注解
三种标准注解:
- @Override:用于方法上,表示当前方法覆盖了父类的方法,若方法签名与父类的不同,则编译器会发出错误提示。
- @Deprecated:声明的类、方法等是被废弃的,使用它编译器会发出警告信息。
- @SuppressWarnings:忽略警告信息,在使用了如@Deprecated等注解标明的不正常的元素时,可以使用此注解忽略,谨慎使用。
四种元注解:
- @Target:注解可以用于什么地方,不声明则用于任何地方,可选的数组参数如下:
- ElementType.TYPE:类、接口、枚举或注解类型
- ElementType.FIELD:域声明
- ElementType.METHOD:方法声明
- ElementType.PARAMETER:参数声明
- ElementType.CONSTRUCTOR:构造器声明
- @Retention:注解的保存级别,可选的参数如下:
- RetentionPolicy.SOURCE:源码级别,只在源码中存在,编译后就消失了
- RetentionPolicy.CLASS:class文件级别,编译后的class文件中仍然存在,但运行时会消失
- RetentionPolicy.RUNTIME:运行时级别,运行时仍然存在,即会一直存在
- @Documented:将此注解包含在 Javadoc 中。
- @Inherited:允许子类继承父类中的注解。A使用了此注解,B继承A,则B也认为使用了此注解。
3. 注解基本语法
定义:类似于接口,使用 @interface,定义注解时,一般需要使用一些元注解,如@Target、@Retention。注解不支持继承。
注解元素:注解中一般都会包含一些元素来表示值,注解元素就像是接口的方法,唯一的区别就是可以指定默认值,没有元素的注解称为标记注解,就像一个空的接口一样。
注解元素可以使用的类型包括:
- 基本数据类型如int、long、double、boolean等
- String
- Class类
- enum枚举
- Annotation注解本身
- 以上类型的数组
注解元素要么在定义时指定默认值,要么在使用时指定,不允许有不确定的值,不允许为null。
注解元素在使用时以 key-value 的形式指定,置于注解声明后的括号中,数组使用k={v1,v2}的形式指定。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationCase {
int id();
String descr() default "no description";
}
public class AnnotationTest {
@AnnotationCase(id = 1)
public String test(){}
@AnnotationCase(id = 2, descr = "test2")
public boolean test2() {}
}
4. 为什么使用注解
使用注解能够极大地简化配置文件的开发,我们可以编写自己的注解处理器,利用反射工具处理注解,甚至于完全代替配置文件。
public static void main(String[] args) {
// 获取 Class 对象
Class clazz = AnnotationTest.class;
// 获取 Method 对象
Method method = clazz.getDeclaredMethods()
// 获取方法上的 @AnnotationCase 注解标识
AnnotationCase ac = method.getAnnotation(AnnotationCase.class);
if(null != ac) {
System.out.println(ac.id() + " : " + ac.descr());
}
}
Java注解基本介绍的更多相关文章
- 功能:Java注解的介绍和反射使用
功能:Java注解的介绍和反射使用 一.注解 1.注解介绍 java注解(Annotation),又称为java标注,是jdk5.0引入的一种机制. Java 语言中的类.方法.变量.参数和包等都可以 ...
- java基础---->java注解的使用(一)
注解是众多引入到Java SE5中的重要的语言变化之一.它为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据.今天我们就开始学习一下java中注解的知识. j ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Java注解(一):介绍,作用,思想及优点
“注解优先于命令模式”-出自<Effective Java> Java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供 ...
- 19.Java 注解
19.Java注解 1.Java内置注解----注解代码 @Deprecated //不推荐使用的过时方法 @Deprecated ...
- 第四节 数据格式化和ModelAttribute注解的介绍
从来都不坦荡,情绪都写在脸上:不开心的时候,不爱说话,笑也勉强. 课堂笔记,如果这么写,不仅仅是手速,还要有语速, 这样不太适合! --胖先生 关于数据传递: 客户端传递数据到服务端: 1.使用普通的 ...
- @interface java注解
@Documented,@Retention,@Target,@Inherited 1. 编写自定义@Todo注解经常我们在写程序时,有时候有些功能在当前的版本中并不提供,或由于某些其它原因,有些方法 ...
- Java注解实践
Java注解实践 标签 : Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK ...
随机推荐
- VS2013 MFC C++ CString ,const char , char, string 类型转换
VS2013 测试 以下测试加入头文件: # include <string>#include <cstdlib>using namespace std; //-------- ...
- Windows录音API学习笔记--转
Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { WORD wMid; 用于波形 ...
- 用了GradientDrawable后,当点击控件时,控件大小发生变化
android新手:发现一个很奇怪的问题,用了GradientDrawable后,当点击控件时,程序自动使我的一些控件大小保持一致,为什么呢,我就是不想它们保持一致啊 改了好久好久:GradientD ...
- Python与正则表达式[0] -> re 模块的正则表达式匹配
正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...
- Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) -B C(GCD,最长连续交替序列)
B. Weakened Common Divisor time limit per test 1.5 seconds memory limit per test 256 megabytes input ...
- 实现微信朋友圈点击评论按钮时cell上移
实现场景:微信朋友圈TableView(BigTableView)的每一行cell都包含一个SmallTableView(显示所有点赞及评论) 实现思路: //BigTableView的content ...
- mOOC 编绎原理
http://mooc.study.163.com/course/YOOKCS0009-1000002001#/info http://study.163.com/series/1001245004. ...
- Android AIDL实例解析
AIDL这项技术在我们的开发中一般来说并不是很常用,虽然自己也使用新浪微博的SSO登录,其原理就是使用AIDL,但是自己一直没有动手完整的写过AIDL的例子,所以就有了这篇简单的文章. AIDL(An ...
- 响应头里的"Last-Modified"值是怎么来的?
1.如图所示,app.js文件得到的响应头的"Last-Modified"数值是:Mon, 09 Sep 2013 09:18:22 GMT 我们查看服务器上的app.js文件的修 ...
- 输入法不能使用ctrl+shift进行切换的问题
第一种情况就是,你的输入法只有一种(而且这种输入法并不是“中文(简体) 微软拼音输入法”). 如果是只有一种输入法的话,是无法进行切换的,如果你是想要把输入法切换到无输入法状态,那么你可以通过设置任务 ...