3、Java框架原理之注解

1、什么是注解?

  • 注解在形式上是标签(协议、方法集合、方法声明),其本质上是通过标签进行映射,实现从依赖性关系到映射性关系(松耦合);
  • 注解的本体:注解本体是一个接口,是一个协议,通过协议实现依赖关系的映射;
  • 注解的实现原理:JDK(或者框架)通过动态代理(反射)生成该注解的一个代理类,该代理类一般由框架管理;从而实现创建权(自洽)和使用权(关系)的分离;
  • 追求低耦合就要抛弃高效率,追求效率必然会遇到耦合。相对于XML,注解选择效率与耦合的平衡;

2、注解的定义和作用目标

  1. 注解的定义:
    • 注解中的成员变量只有属性,不能拥有成员方法;(以方法名称为属性名称的形式,让方法形成新的元数据结构,更抽象的表示被代理的方法,其成员变量映射被代理方法的参数);
    • 注解中的成员变量属性类型限定:八种基本数据类型、String、注解(作为成员属性不加@)‘、Class类型、枚举,及以上数据类型的一维数组。
  2. 作用目标
    • 包(一般不用)、类上、属性上(不建议,不符合类思想)、方法上、方法参数上,本地局部变量上;

3、注解的分类

  1. 元注解:修饰注解的注解,用于指定注解的作用目标和生命周期
  • @Target:注解作用目标

  • @Retention:注解生命周期:

    Source(仅存编译期)、

    Class(在Class文件中,加载舍去,不在JVM中)、

    Runtime(始终存在,可反射);

  • @Documented:注解是否应当包含在JavaDoc文档中;

  • @Inherited:注解是否可以被继承;

  1. 编译期的注解:用于编译器期的检测,是JDK内置的几个注解,只有说明作用,如下:

    • @Override:重写父类方法;
    • @Deprecated:过时的;
    • @SuppressWarnings:压制Java警告;

4、注解的实现

  1. JDK(或者框架)通过动态代理(反射)生成该注解的一个代理类,该代理类一般由框架管理;
  2. 反射实现过程:
    1. 以键值对的形式为注解赋值
    2. 判断该注解的生命周期(保留或舍去)
    3. 将注解写入元素的属性表
    4. 将属性表中的RUNTIME的注解传递给AnnotationInvocationHandler 的一个实例,该实例通过invoke方法实现代理逻辑;
    5. 注解(协议)根本形式就是:通过方法名(方法声明、协议)返回注解值;可以理解为注解的形式就是抽象方法的集合;

5、通过注解理解Java的变异(适应协议:它恰)

  1. 动态代理的起点是类对象的方法,由代理对象的方法(可织入功能形成新的业务逻辑、面向切面)代替类对象方法,而类对象只提供固有逻辑(功能:数据+逻辑);
  2. 代理对象本质上是对象的虚拟化,淡化了必须通过对象调用方法的约束;
  3. 将代理对象交由框架生成、实现,实现面向接口(方法声明、协议)编程的思想理念;
  4. 所谓注解中的value特权,代表着方法重载的唯一性(可被推理的唯一性);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值