动态代理+注解(DynamicProxyAndAnnotations)
什么是注解
注解是⼀种元数据, 可以添加到java代码中. 类、⽅法、变量、参数、包都可以被注解,注解对注解的代码没有直接影响.
定义注解⽤的关键字是 @interface
为什么要引⼊注解
在Annotation之前,XML被⼴泛的应⽤于描述元数据。但是XML是松耦合的⽽且维护⽐较⿇烦。
有时使⽤⼀些和代码紧耦合的东西更加合适(⽐如⼀些服务),Annotation应运⽽⽣,⽽且它更加⽅便维护。
⽬前,许多框架将XML和Annotation两种⽅式结合使⽤,平衡两者之间的利弊。例如ButterKnife, EventBus, Retrofit, Dagger等
注解是如何⼯作的
Annotations仅仅是元数据,和业务逻辑⽆关。也就是说Annotations只是指定了业务逻辑,它的⽤户来
完成其业务逻辑,JVM便是它的⽤户,它⼯作在字节码层⾯.
当然,前端编译⽣成字节码阶段,编译器针对注释做了处理,如果有注解错误等,⽆法正常编译成字节码.只有成功编译⽣成字节码后.在运⾏期JVM就可以进⾏业务逻辑处理.
元注解
java内置的注解有Override, Deprecated, SuppressWarnings等, 作⽤相信⼤家都知道.
元注解就是⽤来定义注解的注解.其作⽤就是定义注解的作⽤范围, 使⽤在什么元素上等等
JDK5.0版本开始提供注解⽀持:
@Documented、@Retention、@Target、@Inherited
@Documented : 是否会保存到 Javadoc ⽂档中。
@Retention : 定义该注解的⽣命周期。
它有三个枚举类型:
RetentionPolicy.SOURCE(只在源码中可⽤)、
RetentionPolicy.CLASS(在源码和字节码中可⽤,注解默认使⽤这种⽅式)、nextint()方法
RetentionPolicy.RUNTIME(在源码,字节码,运⾏时均可⽤,我们⾃定义的注解通常使⽤这种⽅式)
Tips : RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写⼊字节码。
@Override, @SuppressWarnings都属于这类注解
@Target : 表⽰该注解⽤于什么地⽅。如果不明确指出,该注解可以放在任何地⽅。以下是⼀些可⽤的参数。
Tips : 属性的注解是兼容的,你可以添加多个属性。
ElementType.TYPE:⽤于描述类、接⼝或enum声明
ElementType.FIELD:⽤于描述实例变量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论