Java基础——注解
一、概述
引自百度百科:
定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
二、JDK内置注解
Java提供了三种内建注解。
1. @Override——当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。
2. @Deprecated——当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解。Java在javadoc 中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。
3. @SuppressWarnings——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是SOURCE(译者注:在源文件中有效)并且被编译器丢弃。
三、元注解
这里有四种类型的元注解:
1. @Documented —— 指明拥有这个注解的元素可以被javadoc此类的工具文档化。这种类型应该用于注解那些影响客户使用带注释的元素声明的类型。如果一种声明使用Documented进行注解,这种类型的注解被作为被标注的程序成员的公共API。
2. @Target——指明该类型的注解可以注解的程序元素的范围。该元注解的取值可以为TYPE,METHOD,CONSTRUCTOR,FIELD等。如果Target元注解没有出现,那么定义的注解可以应用于程序的任何元素。
3. @Inherited——指明该注解类型被自动继承。如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型,那么也将自动查询当前类的父类是否存在Inherited元注解,这个动作将被重复执行知道这个标注类型被找到,或者是查询到顶层的父类。
4.@Retention——指明了该Annotation被保留的时间长短。RetentionPolicy取值为SOURCE,CLASS,RUNTIME。
更多详细介绍与讲解,参见(推荐):http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html (包含注解处理器等,推荐!)
四、自定义注解
还是像之前一样,我们找到一个已经存在的注解来看看它怎么写的(例如:@SuppressWarnings)
1.定义:可以看到使用 @interface来声明一个注解
public @interface SuppressWarnings {
2.成员:注意定义的格式,后面需要带小括号,如果需要默认值,可以后接default ""等形式
String[] value();
示例:
@Target({ ElementType.TYPE })//注解用在接口上
@Retention(RetentionPolicy.RUNTIME)//VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息
@Component
public @interface RpcService {
String value();
}
使用spring来使用自定义的注解:
@Component
public class MyServer implements ApplicationContextAware {
@SuppressWarnings("resource")
public static void main(String[] args) {
new ClassPathXmlApplicationContext("spring2.xml");
}
public void setApplicationContext(ApplicationContext ctx)
throws BeansException {
Map<String, Object> serviceBeanMap = ctx
.getBeansWithAnnotation(RpcService.class);
for (Object serviceBean : serviceBeanMap.values()) {
try {
Method method = serviceBean.getClass().getMethod("hello", new Class[]{String.class});
Object invoke = method.invoke(serviceBean, "bbb");
System.out.println(invoke);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
//完整的数据类型支持,请参见上文链接
//之后使用的注解中也可以看到,如果注解只有一个成员且为 value,可以省略,不用写@RequestMapping(value = "/add"),可以简写为("/add")
相关文章
- java基础开发—jstl标签库
- java基础—System类的方法演示
- Java的jar文件安装成windows 服务
- 2022 最新 Java 基础 面试题(二)
- java命令 : java -jar 和 java -cp
- 37 Java基础 总结 完结篇 知识串讲 Java语言初识 基础语法 流程控制 方法 数组 面向对象 内部类 异常 常用类 集合框架 IO流 多线程 网络编程 GUI 注解
- 第二十四节:Java语言基础-讲解数组的综合应用
- 第二十三节:Java语言基础-详细讲解函数与数组
- 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
- 哈弗曼编码与反编码的实现 java源代码
- Java基础语法:3. Java基本数据类型
- Error: could not find java.dll如何解决
- Java 16 新特性:record类
- Java反射学习总结五(Annotation(注解)-基础篇)
- 2016第20周四java基础概念
- Java_jdbc 基础笔记之十五 数据库连接(取得数据库自动生成的主键)
- java学习笔记(1)java的基础介绍 、JDK下载、配置环境变量、运行java程序
- Java基础篇:static关键字
- java 从零开始,学习笔记之基础入门<Oracle_基础>(三十三)
- Java语言基础细节归纳
- java 快捷操作Properties 辅助类
- 命令行编译执行java
- 如何提高使用Java反射的效率?