Java笔记 七注解

Java笔记 七注解

注解

什么是注解?

Annotation(注解)是Java5 开始引入的新特性,提供某些信息供程序在编译或者运行时使用。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。

主要作用
  • 生成文档,通过代码里标识的元数据生成javadoc文档。
  • 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
  • 编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
  • 运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。

著作权归@pdai所有
原文链接:https://pdai.tech/md/java/basic/java-basic-x-annotation.html

分类
  • Java自带的标准注解,用注解标明后编译器就会进行检查。
  • 元注解:用于定义注解的注解。例如,@Target用于标明注解使用的范围,@Inherited用于标明注解可继承,@Documented用于标明是否生成javadoc文档。
  • 自定义注解。
元注解
  • @Target 注解的使用范围
  • @Retention 保留时间的范围
public enum RetentionPolicy {
 
    SOURCE,    // 源文件保留
    CLASS,       // 编译期保留,默认值
    RUNTIME   // 运行期保留,可通过反射去获取注解信息
}
------
著作权归@pdai所有
原文链接:https://pdai.tech/md/java/basic/java-basic-x-annotation.html
  • @Documented
  • @Inherited 某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。
  • @Repeatable
  • @Native
@Repeatable

允许在同一申明类型(类,属性,或方法)的多次使用同一个注解

@Repeatable(Authorities.class)//@Repeatable,指向存储注解Authorities
public @interface Authority {
     String role();
}

public @interface Authorities {
    Authority[] value();
}

public class RepeatAnnotationUseNewVersion {
    @Authority(role="Admin")
    @Authority(role="Manager")
    public void doSomeThing(){ }
}
------
著作权归@pdai所有
原文链接:https://pdai.tech/md/java/java8/java8-anno-repeat.html
注解的解析方法
  • 编译期直接扫描 eg.
某个方法使用@Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。
  • 运行期通过反射处理
框架中自带的注解都是通过反射处理。
java.lang.reflect.AnnotatedElement 提供获取主键中内容的方法。只有@retention中传入参数为RUNTIME的注解才会被虚拟机读取。
反射获取注解内容的相关接口
boolean isAnnotationPresent(Class<?extends Annotation> annotationClass);

<T extends Annotation> T getAnnotation(Class<T> annotationClass);

Annotation[] getAnnotations()

<T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass)

<T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass)

Annotation[] getDeclaredAnnotations()
Java 8提高的新注解
  • @Repeatable
  • ElementType.TYPE_USE
自定义注解 @interface + 元注解

注解不支持继承

注解的应用:Spring框架配置化到注解化的转变;Junit3到Junit4,继承实现到注解实现;自定义注解和AOP,通过切面实现解耦(统一日志,权限管理)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值