美文网首页
java注解

java注解

作者: 联想桥南 | 来源:发表于2017-12-18 22:37 被阅读0次

注解,反射,动态代理。基本框架都会用到的基本原理。
先看下注解:

什么是注解:

Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法,这是比较官方标准的定义。

通俗些就是java提供的一个能标记的能力
最常见的用途,就是各种框架里,通过反射来获取指定程序元素的Annotion对象,然后判断Annotion对象类型或者Annotion里的元数据,来做对应的处理逻辑。

注解的分类:
  1. JDK内置系统注解
  2. 元注解
  3. 自定义注解
JDK内置系统的注解
  • @Override:用于修饰此方法覆盖了父类的方法;
  • @Deprecated:用于修饰已经过时的方法;
  • @SuppressWarnnings:用于通知java编译器禁止特定的编译警告。
元注解

元注解可以理解为注解的注解。元注解的作用就是负责注解其他注解
可以看到@Override注解就有元注解在修饰标注。

image.png
元注解在jdk的lang.annotation包下能看到。jdk1.5提供了4个元注解。

@Target
用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
比如:METHOD:用于描述方法,上边截图的Override注解就只能作用在方法上。TYPE:用于描述类、接口(包括注解类型) 或enum声明,ElementType类有注释

@Retention
表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)。RetentionPolicy类有注释
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
比如上边截图的Override只是在源文件中有效,是为了保证编译正确使用的注解。
而sping的Controller注解就是在运行时有效,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理

image.png

@Documented,@Inherited暂时没有使用,等使用到了,再来补充。

自定义注解

@interface关键字,java实现自定义注解的语法。

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。

比如实现一个自定义注解,web控制器标记:

package com.lxqn.jiapeng.spring.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Web控制器标记
 * @author jiapeng
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Controller {
}
注解信息的获取

提供了标记的能力,目的还是获取这些注解信息。获取主要用的是Class类的方法,即反射。

  1. <T extends Annotation> T getAnnotation(Class<T> annotationClass): 返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。
  2. Annotation[] getAnnotations():返回该程序元素上存在的所有注解。
  3. boolean is AnnotationPresent(Class<?extends Annotation> annotationClass):判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.
  4. Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
    例子:

参考文章:
http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
jdk1.8
spring-context-3.2.10

相关文章

  • 菜鸟学服务端技术----Spirng基础

    注解 Java基础加强总结(一)——注解(Annotation) java中的注解是如何工作的? java 注解 ...

  • 自定义注解

    java annotation基础 java注解分为标准注解和元注解。 标准注解是java为我们提供的预定义的注解...

  • Java注解的使用

    Java注解的使用 参考 廖雪峰java教程 使用注解 什么是注解(Annotation)?注解是放在Java源码...

  • Java原生注解和Spring注解的说明

    注解 java 原生注解 Spring 中的注解 一 Java原生注解 Java注解是在JDK1.5以后引入的新特...

  • Java 注解

    JAVA注解 Java 自带注解(系统注解) @Override 表示重写注解 @Deprecated 表示过时的...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • Java注解学习总结(脑图)

    注解的提取测试:定义注解: 测试注解提取: 参考:《Java编程思想》java注解

  • Java注解

    Java注解(Annotation)详解(一)——概述及JDK自带注解 Java注解(Annotation)详解(...

  • JAVA-注解 Annotation

    JAVA-注解 Annotation sschrodinger 2018/6/4 基本 注解 Java 注解用于为...

  • Java注解简介篇

    摘要 本文详细介绍java注解是什么,如何声明java注解,如何解析java注解。最后介绍JDK提供的几大基本注解...

网友评论

      本文标题:java注解

      本文链接:https://www.haomeiwen.com/subject/qwkvwxtx.html